0

假设您正在使用两个 8 位无符号值,例如来自计时器的值。如果您记录停止时间和开始时间,并从停止中减去开始以获得经过的时间,您是否需要使用 mod 来处理翻转或减法是否可行?例如说开始时间 = 11111100 和结束时间 = 00000101 会 (00000101 - 11111100) 给你正确的结果吗?

4

2 回答 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小于iwhen j > 255。这不会影响 8 位结果;这表明这些值仍然与j未屏蔽为 8 位时的结果匹配。

于 2011-01-14T14:54:51.930 回答