【14】unsigned char、char、int之间的转换

一、把所占字节较大的数据赋值给所占字节较小的数据

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

 

 

 

你可能感兴趣的:(C语言)