如何对无符号整数进行操作?

时间:2013-08-25 17:38:26

标签: c modulo unsigned-integer

我不理解以下段落中的模运算:---

  

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

2 个答案:

答案 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