C语言:int型数据向char型数据的强制类型转换原理
程序员文章站
2022-07-15 10:10:26
...
这里写自定义目录标题
## 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型不流失数据转换的话,请务必将方法拍在我的脸上(狗头保命)
上一篇: java中的对象创建过程
下一篇: 动态数组(int型、整型),可自动扩容