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

时间:2018-07-26 08:03:41

标签: 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;
}

输出:

c = -126
f = 130

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

2 个答案:

答案 0 :(得分:4)

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

您可能会问这个问题,因为您认为char用于存储字符。这确实是正确的,但是字符。有关更多详细信息,请参见Character Encoding


*)char(没有显式signedunsigned)是否已签名是由实现定义的,位数也是如此,但必须至少为8。

*) >

答案 1 :(得分:2)

引用C11,第§6.5.16.1p2

  

在简单赋值(=)中,将右操作数的值转换为赋值表达式的类型,并替换存储在由左操作数指定的对象中的值。

这意味着赋值运算符中的RHS被隐式转换为LHS上变量的类型。在您的情况下,整数常量将转换为char类型。

此外,C中没有char常量。像'a''B'之类的字符常量都是int类型的。