-2

我试图理解按位运算,根据我的说法,整数包含 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;
}
4

2 回答 2

0

C++没有指定包含 1<<31 的程序的行为。

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

于 2017-06-16T12:46:27.270 回答
0

整数是 32 位数据类型,其最高有效位代表符号。(即第 32 位)

因此你得到一个负值

于 2017-06-16T10:24:37.557 回答