C ++中1 << 31的模糊结果[重复]

问题描述 投票:-2回答:1

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

#include<iostream>
using namespace std;

int main(){
    unsigned long long int i = 1<<31;
    cout<<i; // this prints 18446744071562067968
}
c++ c++11 bit-manipulation bitwise-operators bit-shift
1个回答
14
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.