int 型 char 型的转换问题

在内存中, char 型是以一个字节八位二进制数保存的,int型是4个字节,32位二进制数保存的,当(int)char 时,赋予int型在32位的最后八位char 的二进制数,剩余的24位不做处理既为0

 当(char)int 时,由于char 型只能是八位,而int型的32位放不下便会截断,丢失精度。

 比如 int a=542;char ch=(char)a;printf("%d",ch);输出为30;

 分析:  542的二进制为  0000 0000  0000  0000   0000    0010  0001   1110当放在char型的八位中时,只有最后八位能放下,其余的都会丢失,所以变成了 00011110它转换为十进制便是30;

如果int a =45;char ch=(char)a;printf("%d",ch);

输出依然是45,没有丢失精度因为45的

二进制为 0000 0000 0000 0000 0000 0000 0000 00101101最后八位能完全放在char 中,高位都是0,所以不丢失精度。

也可以这样说,char 型的十进制范围为 -128~127 所以只要在此范围内的int 型,便能不丢失精度的转换

而(int)char 是绝对没有问题的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值