#include<stdio.h>
int main(){
signed char c; //range of signed char is -128 to 127
char d; //this is basically a signed char, if I am not wrong
unsigned char e; //range of unsigned char is 0 to 255
c = -12;
d = -12;
e = 255;
printf("%cn", c);
printf("%cn", d);
printf("%cn", e);
return 0;
}
这些字符都打印为"?"。 试图理解为什么?它是垃圾值还是实际上分配给不同值的相同字符?这是极不可能的。
当你将char
、signed char
或unsigned char
传递给printf
时,它被提升为一个int
值(在正常的C实现中,char
比int
窄(。对于%c
转换规范,printf
将该int
转换为unsigned char
并写入生成的字符。
当字符不是正在使用的字符集的可打印字符时,显示"?"是一种常见行为。
char
是有符号还是无符号是实现定义的,尽管它仍然是一个不同的类型,独立于signed char
和unsigned char
。