c – 当我离开INT_MAX时发生了什么?

前端之家收集整理的这篇文章主要介绍了c – 当我离开INT_MAX时发生了什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这段代码
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的补码,因此这些代码在其他机器中的行为可能不同.

猜你在找的C&C++相关文章