C 中类型转换丢失的信息

泽伊夫
#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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章