整数溢出概念

Integer overflow concept

本文关键字:溢出 整数      更新时间:2023-10-16

int溢出是如何工作的。我的意思是问,如果发生溢出,整数值的最终结果是什么?我需要把它写下来。就像给我一个选择题:

11 ^ 5生产:
12。
B.
C.
d。17。

我知道答案是(b)14,但想知道为什么?

   DecVal   BinVal
    11   -> 1011
XOR 5    -> 0101
           -------
    14   -> 1110

供参考,这与int溢出没有任何关系。

既然你在问环绕,我就在下面回答。但是从注释中可以清楚地看出,您确实尝试了c++表达式11^5,这是一个位级异或,并得到了与环绕无关的答案14。每对比特的异或结果如果相同为0,如果不同为1。


现在,在下面的^表示取幂;这是常用的符号

11^5 = 161051.

现在考虑一种情况,16位用来表示整数,只有幅度,没有符号。即16位无符号c++整型。那么就有2^16种可能的位模式,它们被编号为0到2^16 - 1,并表示这些数字。

161051大于该16位类型的最大可能值。如果正好是2^16,则对应于0(称为环绕),如果是2^16 + 1,则对应于1,以此类推。所以它对应于161051 - 2^16。

如果它也大于2^16 - 1,你会重复这个过程。

得到整数除法的余数除以2^16。

本质上它只对应于除去除16位最低有效位外的所有位。

顺便说一下,这个例子的结果不是您选择的(a), (b), (c)或(d)。