char c1,c2; c1=197; c2=198; printf("c1=%c,c2=%c\n",c1,c2); printf("c1=%d,c2=%d\n",c1,c2); return 0;

问题描述:

char c1,c2; c1=197; c2=198; printf("c1=%c,c2=%c\n",c1,c2); printf("c1=%d,c2=%d\n",c1,c2); return 0;
#include
int main()
{
char c1,c2;
c1=197;
c2=198;
printf("c1=%c,c2=%c\n",c1,c2);
printf("c1=%d,c2=%d\n",c1,c2);
return 0;
}
运行后为什么是C1=?,C2=?
C1=-59,C2=-58,

char类型的范围是 -128-127
unsigned char类型的范围是 0-255
你定义的超出范围了,溢出了.嗯 然后又怎么会是C1=?,C2=?C1=-59,C2=-58没有对应的字符,或对应的字符不可打印就显示??这个了。197转换成二进制是11000101截取后八位也就是1000101最前面的1表述负数,负数都是用补码表示的,转换成反码为1000100转换成原码为0111011也就是 59,所以显示为 -59了。截取后八位也就是 1000101?这不是7位吗?11000101截取后八位也就是1000101这里有点错误,截取后八位也就是11000101,写错了,最前面的一位是符号位,所以后面的转换中,不需要考虑其符号位。