假设您正在使用两个8位无符号值,例如来自计时器。如果你记录一个停止时间和一个开始时间,并从停止减去开始来获得经过的时间,你是否需要使用mod来处理翻转或减法是否正常?比如说开始时间= 11111100,结束时间= 00000101会(00000101 - 11111100)给你正确的结果吗?
答案 0 :(得分:1)
您可以自己尝试一下,例如:
(5-252)modulo 256 = 9.
当然,如果您的开始和结束时间之间的差异超过256,这将无效。您无法知道“结束时间”已超过“开始时间”的次数,就像经典溢出一样
答案 1 :(得分: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
字词将小于j > 255
。这不会影响8位结果;这表明这些值仍然与j
未被屏蔽为8位的结果相匹配。