char ch = 'a';
这里ch是一个字符变量,所以它的大小是一个字节。 'a'是一个字符常量,因此它的ASCII值将被存储为2字节。但是如何才能在1字节变量中存储2字节值?
答案 0 :(得分:4)
字符文字(例如'a'
)将被视为整数文字,例如97
或0x61
。 C编译器倾向于希望每个整数都存储在int
中,除非另有说明,因此sizeof('a')
可能是sizeof(int)
。
但是,您应该注意到'a'
的值小于127,因此它可以存储在char中(最大值为127或255,具体取决于它是否已签名或未签名)你的编译器)。这与能够:
unsigned long long x = 0;
unsigned int y = x;
y
是从类型大于x
类型的y
分配的,但x
的值恰好在y
的范围内可以表示,所以当最高位(全0)被切断时,没有数据丢失。
答案 1 :(得分:2)
与其他人的回应一样,可以在this question找到更多相关信息。
答案 2 :(得分:0)
你提出了一个很好的问题。我建议你做两件事来满足自己,有足够的空间存放角色:
1)查看getchar()的文档,你会看到它返回一个int,因此有足够的空间存储一个字符的值。理解声明的基础是很好的,但是如果你宣布char cTestChar = 'c';
有足够的空间来存储声明。
2)编译时生成程序集列表。 Visual C / C ++支持这个以及gcc。 gcc使用-Wa选项生成程序集输出。地图将显示字符类型的分配。
答案 3 :(得分:-2)
一个字符常量只有一个字节...