一、把所占字节较大的数据赋值给所占字节较小的数据
unsigned short a = 256;
char b = a;
printf("%d",b);
输出的b的值是0,因为256超过了char类型的最大值,即宽数据变窄数据:保留低地址数据
256 即0000 0001 0000 0000,只取后八位,所以b为0
二、把所占字节较小的数据赋值给所占字节较大的数据
窄数据变宽数据:左边补符号位
(1)有符号数左边补符号位
char a = -1; //-1原码是 1000 0001,求其补码,除符号位取反+1,1111 1111
int b = a; //新扩充位用符号位填充 1111 1111 1111 1111 1111 1111 1111 1111 (0全变1)
printf("%d",b); //由于int是有符号数,需求上式原码,-1,除符号位取反。
输出的结果是-1
(2)无符号数左边补0
unsigned car a = -1; //源码是:1000 0001,求其补码,除符号位取反+1,1111 1111
int b = a; //新扩充 0000 0000 0000 0000 0000 0000 1111 1111
printf("%d",b); //由于int是有符号数,需求上式源码
输出结果是:255