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

Why is int i = 1<<31 == -2147483648 instead of 2147483648?

本文关键字:lt 2147483648 -2147483648 int 为什么      更新时间:2023-10-16

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

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

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

因此,您得到的是负值

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

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