实验3-数据类型转换

前言

  • 在C语言中,整数的赋值是机器数的赋值,而不是真值的复制
  • 而我们printf出的真值是经过编译器把机器数翻译出来的结果,这个翻译的过程与我们定义变量时指定的数据类型有关系
  • 这篇文章中我们的研究对象是C语言中的赋值语句b=a;
  • 但是b与a的数据类型可能相同也可能不同,那么就会产生截断或者扩展或者编码转换等的问题

一、整数与整数

我们知道C语言中的整数有很多种
按照是否带符号分为:有带符号整数和无符号整数
按照长度有:short int long
这样一组和的话就是说整数有2*3=6种类型
在这个实验中我们关心的就是:在赋值的时候,如何从一种类型到另一种类型

1.宽度相同

比如int->int short->short long->long
考察赋值语句b=a;b与a的机器数相同,但是真值不一定相同

int x=-1234;
unsinged int y=x;
在这里插入图片描述

2.长的数据类型赋值给短的数据类型 – 发生截断

int x=0x12345678;
short y=x;
运行结果
在这里插入图片描述

3.短的数据类型赋值个长的数据类型 – 发生扩展

如果是带符号整数发生符号扩展
否则发生0扩展

二、整数和浮点数转化

1.整数 ⇒ 浮点数

整数真值以补码形式的机器数存储
补码转换成float编码 按照IEEE754标准分段找到符号位、尾数、阶码部分
转换过程可能会有精度的损失

2.浮点数 ⇒ 整数

float编码转换成补码,可能会产生溢出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值