为什么int i = 1<<31 == -2147483648而不是2147483648?
Why is int i = 1<<31 == -2147483648 instead of 2147483648?
我试图理解按位运算,据我说整数包含 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 的程序的行为。
在不同的平台上,您可能会得到不同的答案、编译错误、格式化驱动器的程序或任何其他行为。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 如何显式调用运算符<<
- Why (int)pow(2, 32) == -2147483648
- 模板操作员&lt;未打电话
- C / CUDA中的模板方法是3个角括号(&lt;&lt;&lt;)
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- 为什么int i = 1<<31 == -2147483648而不是2147483648?
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- 为什么STD :: MAP需要操作员&lt;以及我如何写一个
- 为什么“操作员”需要const但不是为“运营商&lt;”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 左角支架解释为操作员&lt;而不是模板参数
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型