C语言:int型数据向char型数据的强制类型转换原理

int型数据向char型数据强制转换原理

C语言中int是四个字节,char是1个字节,占字节多的int型向字节少的char型强制类型转换的原理就是字节截断。
转换时系统会自动删除高位的三个字节,只留下低位的一个字节,这就是int型想char型转换时丢失数据的原因。例如数据b是0X1234,为十六进制,在计算机中是这样存储的:

           0000 0000 0000 0000 0001 0010 0011 0100

共4个字节。转换成char类型后,前3个字节丢弃,即结果是

0011 0100

共1个字节,对应的十进制是52

转换后的数据也是有迹可循,char型数据的范围是-128~127,你可以把他想象成一个圆盘,最上面是0,向右+1,向左-1,最下面是127和-128相邻。当你将一个大于127的正数转换时,可以理解成从零出发绕圈,最终结果就是停留的格子。

为了验证上述结论,我们可以看下面的这段简单地代码:

// An highlighted block
#include<stdio.h>
int main()
{
	int x=312;
	char y=(char)x;
	printf("%d",y);
}

结果图片:
在这里插入图片描述
我们可以看到,原来x的值是312,在强制转换赋给y后,变成了56(312-256).

这是我对类型转换的一点小理解,如果有不当的地方,请在评论区留言。
PS:如果有大佬知道int型怎么向char型不流失数据转换的话,请务必将方法拍在我的脸上(狗头保命)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值