在C ++中1 <&lt; 31的模糊结果

时间:2017-12-19 22:00:57

标签: c++ c++11 bit-manipulation bitwise-operators bit-shift

运行以下代码时,为什么1<<31打印18446744071562067968作为输出?

#include<iostream>
using namespace std;

int main(){
    unsigned long long int i = 1<<31;
    cout<<i; // this prints 18446744071562067968
}

1 个答案:

答案 0 :(得分:14)

1是signed int,在您的系统上是32位。 1 << 31导致溢出,并且为负数(0x80000000)。当转换为64位unsigned long long时,将其转换为64位,然后转换为ULL值,即0xFFFFFFFF80000000或您看到的大十进制数。