我有这段代码
int a = 1;
while(1) {
a<<=1;
cout<<a<<endl;
}
在输出中,我得到
.
.
536870912
1073741824
-2147483648
0
0
为什么我没有达到INT_MAX?超出那一点,到底发生了什么?
您有一个带符号的int,所以数字以2的补码表示。这是怎么回事
00..01 = 1
00..10 = 2
[...]
01..00 = 1073741824
10..00 = -2147483648 // Highest bit to one means -01..11 - 1 = -(2^31)
00..00 = 0
您最多不能达到INT_MAX 2^30
。
正如评论中指出的那样,c ++标准不强制执行2的补码,因此该代码在其他计算机上的行为可能有所不同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句