#include <stdio.h>
int main(int argc, char const *argv[])
{
int x = 128;
char y = x;
int z = y;
printf("%d\n", z);
return 0;
}
我不明白为什么这个程序会打印 -128。我试图将 128 转换为二进制基数,但我仍然对 C 编译器如何将 int 转换为 char 和将 char 转换为 int 感到困惑。
注意:在我的机器中 sizeof(char) = 1 和 sizeof(int) = 4
假设 achar
是有符号的并且是 8 位,它的范围是 -128 到 127,这意味着值 128 超出了 a 的范围char
。因此,该值以实现定义的方式进行转换。在 gcc 的情况下,结果是将模 2 8减少到范围内。
这基本上意味着将int
值 128的低位字节分配给char
变量。128 十六进制作为 32 位是 0x00000080,所以 0x80 被分配给y
. 假设 2 的恭维表示,这表示值 -128。当这个值被分配给z
,它是一个int
,这个值可以用 an 表示int
,所以这就是分配给它的,它的表示是 0xffffff80。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句