超出类型范围的计算

char a = 111;
char b = 15;
char c = a * b / 3;
求c的值

这个主要是关于,超出数值范围会被截断和类型转换的问题。
由于3是一个整型数值,所以编译器会将a,b转换为int型。111*15/3 = 555;由于c是char型,超过了它的范围,会进行截断,555转换为16进制是0x22b, 截断后是0x2b,而0x2b的十进制是43,所以c的值就是43;
这里还有一个细节:如果c = a*b; 因为111* 15 =1665,超过了字符型数值范围,也会截断,截断后是 0x81, 写成二进制就是10000001,因为负数是以二进制的补码存在内存中,所以-127的补码刚好是10000001,所以这时c的值就是-127;

你可能感兴趣的:(面试题)