c语言没有要求char的定义是unsigned还是signed的,假如我们声明一个char,并不知道默认是unsigned还是signed类型。
这会导致一个问题:当我们将char 转换为int时,如果char为负数,可能导致转换结果出错,下面显式地声明unsigned/signed进行测试
1.如果char默认是unsigned的类型
unsigned char c = EOF;
printf("%dn", c);//255
EOF为-1,char占用8位,在内存中以补码形式保存:
-1的原码:1000-0001
-1的补码:1111-1111
当以%d输出,因为是无符号的输出,结果是2^8-1=255
2.如果char默认为signed类型
signed char c2 = EOF;
printf("%dn", c2);//-1
因为是有符号的情况,所以正常输出
结论:声明的char如果要进行int类型的转换,则不要声明为char,直接声明为int更加安全



