【发布时间】:2017-06-16 10:16:34
【问题描述】:
我试图理解按位运算,根据我的说法,整数包含 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;
}
【问题讨论】:
-
因为在 2147483648 个组合中,其中一个为 0 :)
-
cout << std::numeric_limits<int>::max() -
如果你有一个(二进制补码)N 位宽的有符号整数,它可以表示从
-2^(N-1)到2^(N-1)-1的值。对于您的 32 位整数,最大值为2^31-1,即2147483647。
标签: c++ c++14 bit-shift signed-integer