C 奇怪的换档行为

标签 c bit-shift

以下行:

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

输出-1

我已经检查过了

sizeof(long) == 8

为什么会发生这种情况?

最佳答案

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

调用未定义的行为 (long) 7 << 63不能用 long 来表示.

关于C 奇怪的换档行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33377834/

相关文章:

c - 使用 libcurl 和 SSL 进行对等验证

c - 如何在不知道其名称的情况下获取 JobObject 的句柄?

c - 链表冒泡排序

algorithm - 通过循环移位求幂

c++ - 为什么将 int 向上移位会产生负数?

javascript - 什么是 JavaScript >>> 运算符以及如何使用它?

c++ - 在 C++ 中附加两个无符号字符的位运算符

c - C中的循环/定时器

c - 是否可以在int变量中存储浮点值

c - C 中的位操作 - 左移以删除最高有效位