首页 > 解决方案 > 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

标签: ccompilation

解决方案


C 标准没有指定 char 是有符号还是无符号。实际上,为 char 类型分配基本执行字符集之外的值是实现定义的。您可能可以使用宏<limits.h>来验证。

我怀疑你的系统char是有符号的,这使得最大值为 127。有符号整数溢出是 undefined。所以不能保证产量。在这种情况下,它看起来像环绕。


推荐阅读