整型提升和数据截断,数据截断是在存储时发生的。
对于这个程序,a,b打印都时满足预期的,但c并没有,这就和整型在内存中的存储方式有关。
这里打印的时候,编译器会提醒,打印类型和转换说明不一致,实际上这里 i+j 得到的数值 是无符号整型存储的(计算时类型转换,整型要转化为无符号整型,再进行运算,所以最后是两个无符号整型相加,最后的结果也是整型),但是再编译器在读取 i+j 的值的时候,由于转换说明是整型,所以会将 i+j 的值解读成整型,所以这里才会提醒,类型不一致。
对于整型来说,好像由于其大小足够存储整数,所以在整数计算上不会有整数的提升和截断,
这里无符号的作用好像并没有很明显的体现,因为没有截断后的提升的话,存储的数据一般貌似是不会变的,而最后如何理解打印,则是转换说明决定的。
但对于字符型的运算,有无符号好像影响就比较大,目前感觉主要体现在,对字符型赋值时的截断(这里主要是字符型的原因,只能保留八位)和参与运算时需要进行的整型提升(这里和是否为有无符号位关系比较大,因为无符号位的话,高位都是补 0 .)
对于下面的几个程序,可自行分析,第一三个是死循环,第二个打印的不是1000.