为什么我们可以将整数赋给 char 变量

Ala*_*lan 0 c

我随机在 StackOverflow 上冲浪。看到一个问题我顿时一头雾水。为什么我们可以将整数值赋给 char 变量?

代码片段

#include <stdio.h>
int main()
{
    char c = 130;
    unsigned char f = 130;

    printf("c = %d\nf = %d\n",c,f);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

c = -126
f = 130
Run Code Online (Sandbox Code Playgroud)

我一直认为值必须分配给正确的类型标识符,为什么我们可以这样做?

小智 5

这是因为char是整数类型(最小的类型),不同整数类型的值可以隐式转换。但请注意,您的示例代码在带符号8 位*)的典型机器上具有实现定义的行为:溢出(最大值为),并且在转换期间溢出有符号整数类型的结果是实现定义的char130127

您可能会问这个问题,因为您认为char是用于存储字符。这确实是事实,但字符数字。有关详细信息,请参阅字符编码。


*) 是否char(没有显式signedunsigned)带符号是实现定义的,位数也是如此,但必须至少有 8 个。