*111.大多数编译器中char都是默认为有符号的char,但是int默认都是有符号的
。有符号整形提升是按照变量的数据类型的符号位来提升的
.无符号整形提升,高位补零
ASCII码值是0到127
1.int 类型的数据存入char类型的变量
int 类型的125为a
00000000000000000000000001111101
将它存入char类型的变量当中则会发生截断
只剩下
01111101
再如
int 的10b
00000000000000000000000000001010
截断后为00001010存入char
而
上边得到的char两个数据相加的话
01111101
00001010
要整形提升才能相加
(上边的两个char都是有符号的)
所以二者经过整形提升后变为了
00000000000000000000000001111101
00000000000000000000000000001010
二者再相加,为
00000000000000000000000010000111
{
另外,负数整形提升后不一定不变
因为高位会补零
而且补零后为补码
}
如果再将上边所加得的值存入一个char类型的变量里边
则又要发生整形折断
即变为了10000111
这时如果用%d打印的话(因为%d是打印有符号的整数的)
因为此时和为10000111
所以整形提升后为11111111111111111111111110000111
这个为补码
转为原码为10000000000000000000000001111001
即为-121
而如果a+b不存入char类型的c中,则输出135
3.