有人可以解释这个程序如何提供这个输出
Can someone explain how this programs gives this output?
int x = -2139062144; //In binary: 10000000100000001000000010000000
int k = x << 1;
k
是16843008
(二进制:1000000010000000100000000
),我不明白为什么?
10000000100000001000000010000000
是如何通过一个左位移变成1000000010000000100000000
的?
我期望它是:10000001000000010000000100000000
保持符号,如右位移位符号是守恒的。
非常简单。
您的int
最多只能携带 32 位。好吧,正好是 32 位,一直。
在
10000000100000001000000010000000
最重要的前导位是 1。
你认为这个注定要失败的位会发生什么,由于左移?
不见了。它不复存在。它隐形地加入了合唱团。这是前一点。
而且,当然,还有一个新生的,0位处于最不重要的位置。所以你最终得到
00000001000000010000000100000000
因此,或:
1000000010000000100000000
负
值的左移具有未定义的行为。任何事情都可能发生,包括你所看到的。
http://en.cppreference.com/w/cpp/language/operator_arithmetic#Bitwise_shift_operators
相关文章:
- COUT 无法提供输出可能是由于内联组装
- 与其他编译器相比,相同的代码在工作室Microsoft提供不同的输出
- 是给定代码中的任何更改,以便我可以为问题提供正确的输出
- 如何为流输出运算符提供重载<<模板'using'类型别名?
- Printf 和 Echo 提供不同的输出
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 为什么以下代码块提供输出"ZZZ(some garbage value)"而不是"ZZ(some garbage value)"
- Opencv 平均滤波器提供的输出与 Matlab 平均滤波器不同
- 基本 int 数组提供意外输出
- 为什么printf和cout为此无符号int提供了不同的输出
- QThread 不提供来自调用 shellscript 的输出
- Cout 在循环访问常量字符时提供垃圾输出
- CPP和Java提供不同的输出
- UTF-8字符串上的位XOR操作可提供非UTF-8输出
- 当我使用继续时,程序不提供任何输出
- OpenGL:计算着色器 - gl_GlobalInvocationID提供静态输出
- 谁能帮助我解决以下 c++ 代码中的问题?该程序不提供任何输出
- 为什么这个程序不提供输出?
- 程序不提供输出
- 使用sstream in在ofstream中提供输出文件的名称