假设您正在使用两个 8 位无符号值,例如来自计时器的值。如果您记录停止时间和开始时间,并从停止中减去开始以获得经过的时间,您是否需要使用 mod 来处理翻转或减法是否可行?例如说开始时间 = 11111100 和结束时间 = 00000101 会 (00000101 - 11111100) 给你正确的结果吗?
问问题
429 次
2 回答
1
你可以自己试试,用你的例子:
- 开始时间 = 1111 1100 (= 252)
- 结束时间 = 0000 0101 (= 5)
(5-252) 模 256 = 9。
- 结束时间 - 开始时间 = 0000 0101 - 1111 1100 = 0000 1001 (= 9)
当然,如果您的开始时间和结束时间之间的差异超过 256,这将不起作用。您无法知道“结束时间”已经超过“开始时间”多少次,就像经典溢出一样。
于 2011-01-14T15:01:26.710 回答
0
是的,减法如您所愿。你不需要做任何特别的事情来处理翻转。对于您的示例时间,减法表现良好:
00000101 - 11111100 == 00001001
(5) - (252) == (9)
或者:
(5+256) - (252) == (9)
请参阅此 Python 测试以证明这一点:
>>> all((j - i) & 0xFF == ((j & 0xFF) - i) & 0xFF
... for i in range(256)
... for j in range(i, i + 256))
True
项将j & 0xFF
小于i
when j > 255
。这不会影响 8 位结果;这表明这些值仍然与j
未屏蔽为 8 位时的结果匹配。
于 2011-01-14T14:54:51.930 回答