如何将整数值分配给char数据类型?

如何将整数值分配给char数据类型?,c,C,在下面的代码中,如何将char数据类型分配给整数变量(如char数据类型中,字母用单引号表示),并且在打印char数据类型时,使用%d下标而不是%c #include <stdio.h> int main() { char a = 30, b = 40, c = 10; char d = (a * b) / c;//a char value is storing integer value ?how ? printf

在下面的代码中,如何将
char
数据类型分配给整数变量(如char数据类型中,字母用单引号表示),并且在打印char数据类型时,使用%d下标而不是%c

#include <stdio.h> 
    int main()
    {
        char a = 30, b = 40, c = 10;
        char d = (a * b) / c;//a char value is storing integer value ?how ?
        printf ("%d ", d); 
        return 0;
    }
#包括
int main()
{
字符a=30,b=40,c=10;
char d=(a*b)/c;//字符值正在存储整数值?如何存储?
printf(“%d”,d);
返回0;
}

char数据类型如何存储整型值?

char
s只是小整数,可以保存范围
[-128;127]

(在某些系统上,它可能是
[0;255]
。在非常罕见的平台上,它可以有另一个大小,但您可能永远不会看到这些情况。)

'0'
这样的字符文字只是对应符号的代码。例如,
'0'
等于
48

(在大多数编码中,另一个值非常罕见。)


为什么
%d
适用于
char
?因为当您将
char
s和
short
s传递给
..
函数参数时,它们会自动转换为整数。

printf
被声明为
printf(const char*,…)

此外,计算
30*40
不会溢出,因为操作数被提升为
int
类型,并在除法后转换回
char

当传递给变量函数(如
printf
时,
char
再次提升为
int


旁白:对于
float
类型,当传递到
printf
、传递到
double
时,该类型也会升级。这就是为什么
printf
格式说明符
%f
同时适用于
float
double
。至于计算,是否将
float
提升为
double

是一个实现决策。当您将
int
存储到
char
中时,它只会删除低8位以外的所有位。因为char是包含1字节(8位)数据的数据类型。因此,在char中可以存储整型值,整型值可以用8位表示。正常情况下为0-255。因此,您可以将该范围内的值存储在char中。然而,如果您试图将一个值存储在该范围之外(比如258),那么您可能会遇到问题。试试看@BillLynch我故意简化了我对OP的回答。好的,我会添加这些信息。主要的违规者是有符号或无符号的
char
。这很容易在普通人可能处理的平台上发生变化。其他的则不太常见。@BillLynch:True,带有未签名的纯
char
的平台比带有
char\u BIT>8
的系统更常见。还值得注意的是,基本字符集的所有成员都必须具有非负值;
char
可能存储负值,也可能无法存储负值,但
'a'
始终为正值。