我有这段
代码
int a = 1;
while(1) {
a<<=1;
cout<<a<<endl;
}
在输出中,我得到了
.
.
536870912
1073741824
-2147483648
0
0
为什么我没有达到INT_MAX?除此之外真正发生了什么?
你有一个有符号的int,所以数字是二进制补码.这就是发生的事情
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的补码,因此这些代码在其他机器中的行为可能不同.