概述
文章目录
- 前言
- 一、较长的整形赋值给较短的整形
- 二、较短的整形赋值给较长的整形
- 1.正数
- 2.负数
- 总结
前言
在c语言中我们或多或少的会在不同内存长度的变量之间赋值,但如果对不同类型之间的转化不了解,很容易发生一些意想不到的意外。
提示:以下只研究了有符号整形之间的转换
一、较长的整形赋值给较短的整形
int a=0x12345678;
char b=a;
printf("%xn",b);
这里用16进制格式的数据赋值给a(16进制与二进制的转化关系):
因为int类型为4字节,而char类型为1字节,所以赋值时发生数据溢出,系统采用截断处理,b可能是0x12,也可能是0x78,这具体与系统大小端的储存方式有关。
二、较短的整形赋值给较长的整形
因为长度不够,系统采用补齐位数的方式。
1.正数
char b=0x12;
int a=b;
不足的位数补0,如b=0x12(0001 0010),则a=0x12(0000 0000 0000 0000 0000 0000 0001 0010)。
这样做的好处是使a的位数满足要求,又不改变a=b的关系
2.负数
char b=0x87;
int a=b;
不足的位数补1,如b=0x87(1000 0111),则a=0xff ff ff 87(1111 1111 1111 1111 1111 1111 1000 0111)。
这样做的好处同上,1000 0111 我们反推出它的反码为1000 0110,进一步反推出原码为1111 1001,即-121;同理,a的原码为1000 0000 0000 0000 0000 0000 0111 1001,即-121,所以负数不足的位数补1也并不会改变a=b的关系。
总结
长度较长的变量赋值给长度较短变量时长度长的数据会发生数据截断;
长度较短的变量赋值给长度较长的变量时对较短的数据补齐位数,正数则补0,负数补1。
最后
以上就是还单身万宝路为你收集整理的字节数不同的变量间赋值会发生什么?前言一、较长的整形赋值给较短的整形二、较短的整形赋值给较长的整形总结的全部内容,希望文章能够帮你解决字节数不同的变量间赋值会发生什么?前言一、较长的整形赋值给较短的整形二、较短的整形赋值给较长的整形总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复