【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

 

 

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值