【发布时间】:2018-02-08 07:28:02
【问题描述】:
我有以下c代码:
int foo = 0;
printf("output1: %08x\n", (~0x0) << (~0));
printf("output2: %08x", (~0x0) << (~foo));
打印出来的:
output1: ffffffff
output2: 80000000
为什么移动相同的数字会产生不同的结果?
【问题讨论】:
-
您正在移动 signed 值。按签名金额。 IIRC 后者是未定义的行为。
-
两者都是未定义的行为;你得到的结果是任意的。您只能将 0 移动到比类型中的位数少 1 的位置。见C11 §6.7.5 Bitwise shift operators。
-
@Someprogrammerdude:有符号的班次并不是一个特别的问题;负移位是,
~0是负数(通常被视为-1)。
标签: c byte-shifting