1.3类型转换

*  当把占字节较小的数据赋值给占字节较大的数据时,可能出现以下两种情况。

*  第1种情况,当字节较大数是无符号数时,转换时新扩充的位被填充成0

char b = 10;
unsigned short a = b;
printf("%u",a);


这样赋值后,变量a中输出的值是10,原因如下:


* 当字节较大数是有符号数时,转换时新扩充的位被填充成符号位

        unsigned char b = 255;
         short a = b;
         printf("%d",a);


                   这样赋值后,变量a输出的值是-1,变量a扩充的高8位,根据变量b的最高位1都被填充成了1,所以数值由正数变成了负数,因为变量a的最高位符号位是1,至于为什么16个1表示的是-1,涉及到二进制数的原码和补码问题,大家回顾下补码。转换图示如下:



转载请注明出处。https://www.cnblogs.com/jyfootprint/p/9457346.html
原文地址:https://www.cnblogs.com/jyfootprint/p/9409958.html