整数溢出的概念

int溢出如何工作。 我的意思是问如果发生溢出,整数值的最终结果是什么? 我需要在纸上理解它。 就像我给出了一个多项选择题:

11 ^ 5产生:
一个。 12
湾 14
C。 15
d。 17。

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

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

fyi,这与int溢出没有任何关系。

因为你问的是环绕式,我正在回答下面的问题。 但是从评论中可以清楚地看到,你真的尝试了C ++表达式11^5 ,一个小级别的XOR,得到了答案14,这与环绕无关。 如果它们是相同的值,则每对位的XOR结果为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)。