-1

我不明白以下段落中的模运算:---

但是,当在对无符号整数的操作期间发生溢出时,结果是定义的:我们得到正确的答案模 2^n ,其中 n 是用于存储结果的位数。例如,如果我们将 1 添加到无符号数16 位数字 65,535 ,结果保证为 0。

4

2 回答 2

3

想象一个时钟,其值的范围为 [0..11](12 个不同的值),当您说时间是 14:00 时,您也可以说它是下午 2 点,即 14 mod 12。当整数溢出(65,536 mod 65,536 为 0)。答案在您的应用程序中在语义上是否正确取决于应用程序。

于 2013-08-25T17:51:44.053 回答
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

于 2013-08-25T17:59:20.687 回答