为什么int i = 1<<< 31 == -2147483648而不是2147483648?

时间:2017-06-16 10:16:35

标签: c++ c++14 bit-shift signed-integer

我试图理解按位运算并且根据我整数包含32位并且从LSB第0位置到MSB第31位置所以如果我将左移位1设置为31位置我想我应该得到2 ^ 31和二进制表示它将是10000000 00000000 00000000 00000000所以为什么我的结果是负面的?如果我错了,请纠正我。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int i=1<<31;
    cout<<i;
    return 0;
}

2 个答案:

答案 0 :(得分:0)

Integer是32位数据类型,其最重要的位代表符号。 (这是第32位)

因此,您获得了负值

答案 1 :(得分:0)

C ++ 未指定包含1&lt;&lt; 31的程序的行为。

在不同的平台上,您可能会得到不同的答案,或编译错误,或格式化驱动器的程序,或任何其他行为。