#include<stdio.h>
int main(void)
{
char c = 0x80;
printf("%d\n", c << 1);
return 0;
}
输出是-256
在这种情况下。如果我写 c << 0
那么输出是-128
.
我不明白这段代码背后的逻辑。
最佳答案
char
可能会在您的平台上签名,在这种情况下 0x80
表示 -128(假设为二进制补码)。
当 char
用作 <<
的操作数运营商,它被提升为int
(仍然是-128)。所以当你应用左移时,你会得到 -256。从技术上讲,移动负值是实现定义未定义的,但您看到的是典型行为。
关于c - 如果 char c = 0x80,为什么 printf ("%d\n", c << 1) 输出 -256?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4001630/