标签: c bit-shift
以下一行:
printf("%ld\n", ((long) 7 << 63) >> 63));
输出 -1
我已经检查过了
sizeof(long) == 8
为什么会这样?
答案 0 :(得分:1)
((long) 7 << 63) >> 63)
调用未定义的行为,因为(long) 7 << 63无法表示long。
(long) 7 << 63
long