欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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);
}

结果图片:
C语言:int型数据向char型数据的强制类型转换原理
我们可以看到,原来x的值是312,在强制转换赋给y后,变成了56(312-256).

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

相关标签: c语言