我不理解以下段落中的模运算:---
但是在对无符号整数进行操作期间发生溢出时,会定义结果 :我们得到正确的答案模2 ^ n,其中n是用于存储的位数 例如,如果我们将1加到无符号的16位数65,535,结果就是 保证是0。
答案 0 :(得分:3)
想象一个时钟,其值为[0..11](12个不同的值),当你说时间是14:00时,你也可以说它是下午2点,这是14 mod 12.同样的事情发生了当一个整数溢出时(65,536 mod 65,536为0)。答案在应用程序中的语义是否正确取决于应用程序。
答案 1 :(得分:0)
使用n位,您可以表示0到2 ^ n-1之间的数字范围。 因此,如果您添加一个数字且结果大于2 ^ n-1,则无法将其表示为。
想象你只能代表5个数字:
0 1 2 3 4
然后, 无法表示2 + 3 = 5,但可以表示5 mod 5 = 0
0 1 2 3 4 0 1 2 3 4 5
这是因为2 ^ n-1是二进制:1111 1111 .... 1111(n次)如果你给它添加一个数字,你将有一个溢出并且计数再次开始:
1111 + 0001 = 0000