数据类型强制转换(无符号与有符号,短字节和长字节(double转int),float转int等)

定义

在这里插入图片描述

1. 无符号数和有符号数

核心思想:位模式不变
方法一:先转为二进制串,再分别按位串转无符号数(或有符号数)的定义转化


方法二:采用公式直接计算
补码转无符号数
在这里插入图片描述

2. 短字长数和长字长数(如short和int)

2.1 短转长

核心思想:高位扩展并保证短和长的真值相同
方法:无符号数高位添0,有符号数进行符号位扩展

2.2 长转短

核心思想:截断,溢出
方法:

  1. 整数->整数(long->int):先丢弃高位(即取模),再采用B2U或B2T
  2. 浮点数(double->float):溢出或丢失精度
  3. 浮点数->整数(double->int):溢出或截断小数部分

3. 特殊(int和float)

int->float:int损失精度,因为float总是近似值(只有6位有效数字),而int是准确值
float->int:

  1. float值小于int能表示范围时,小数部分被截断,只保留整数部分;
  2. float值超过int表示范围,发生溢出,具体策略视编译器而定(在gcc中,若溢出,则采用INT_MAX(或INT_MIN))

总结

  1. 无符号数与有符号数的真值差异非常大,当表达式中含有无符号数时,表达式中的有符号数会被T2U,这时程序容易存在安全隐患,因此要避免无符号数的使用
  2. 长字长数转短字长数会丢失精度和溢出(如double->float, int->short)
  3. 短字长数转长字长数不会丢失数据精度,因为其核心思想是保证真值相同,
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值