程序的执行结果为( )
int main()
{
unsigned char a = 200;
unsigned char b = 100;
unsigned char c = 0;
c = a + b;
printf(“%d %d”, a + b, c);
return 0;
}
解析:隐式类型转换概念:C的整型算数运算总是至少以缺省整型类型的精度来进行的。
为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。
因为200和100被强制转换成了无符号字符型数据,因此只能存储8个字节,因此内存中存的数据分别为11001000和01100100,a和b相加时会发生整型提升,因此变为00000000 00000000 00000000 11001000和00000000 00000000 00000000 01100100,相加后得到00000000 00000000 00000001 00101100 ,十进制结果为300,这是a+b的结果,c为无符号字符型数据,只能存储一个字节,也就是8个比特位,因此a+b的结果存储到c中的数据为00101100,当作为以整型类型打印时,会发生整型提升,变为00000000 00000000 00000000 00101100,十进制结果为44
#include<stdio.h>
int main()
{
unsigned char a = 200;
//00000000 00000000 00000000 11001000
//11001000
unsigned char b = 100;
//00000000 00000000 00000000 01100100
//01100100
unsigned char c = 0;
c = a + b;
//00000000 00000000 00000000 11001000
//00000000 00000000 00000000 01100100
//00000000 00000000 00000001 00101100 a+b
//00000000 00000000 00000000 00101100
return 0;
}