题目如下:
请问a,b,c的输出结果分别是什么
#include<stdio.h>
char a = -1;
signed char b = -1;
unsigned char c = -1;
printf("a = %d,b = %d,c = %d",a,b,c);
答案:
解析:
1、char类型变量中存储的值的本质就是数字(存入字符时,字符会转化为ASCLL表中对应的数字再存入),因此char类型的变量是可以直接存储数字的,只不过由于字节数的限制,存储范围较小。
2、-1的补码是11111111111111111111111111111111,存入char、signed char、unsigned char类型变量中时,会发生截断,只将补码的八个低位端的1放入,即11111111。
3、打印时,由于打印格式是%d,那么会发生整形提升。提升规则如下:有符号位则左端补充符号位,无符号位则左端补充0。于是a补充为11111111111111111111111111111111(char一般默认为有符号型),b补充为11111111111111111111111111111111,c补充为00000000000000000000000011111111。转化成原码输出,它们的结果分别是-1、-1、255