C奇怪的转移行为

时间:2015-10-27 20:27:09

标签: c bit-shift

以下一行:

printf("%ld\n", ((long) 7 << 63) >> 63));

输出 -1

我已经检查过了

sizeof(long) == 8

为什么会这样?

1 个答案:

答案 0 :(得分:1)

((long) 7 << 63) >> 63)

调用未定义的行为,因为(long) 7 << 63无法表示long