c 语言数据类型的隐式转换

c 语言数据类型的隐式转换 + 数据溢出

1. C语言的4种隐式类型转换

情形转换情况
算术运算低类型转换为高类型
赋值表达式赋值符号右边的类型转换为左边的类型
函数调用实参转换为形参的类型
函数返回return 表达式的类型转换为返回值类型

在这里插入图片描述

算术运算的自动转换

图示解释:

  • 在算术运算中,如果混合表达式中没有比int类型级别高的,
    参与运算的数值先转换为 int 型后再进行运算;
  • 无符号和有符号的混合运算中,有符号类型会转换为无符号类型

小贴士:

  • 隐式类型转换是编译器自动进行转换的,

    不会出现警告和错误;

2. 数据的溢出

溢出:计算产生的结果超过该类型所嫩表述的范围

类型范围举例内存结果分析
有符号类型运算结果没有超过类型
表示数字总数
char ch = 198;ch = -58198 - 256 = -58;
结果超过类型
表示数字总数
char ch = 682;ch = -86682 - 256 = 426;
426 - 256 = 170;
170 - 256 = -86;
无符号类型运算结果为负数unsigned char ch = -130;ch = 126;-130 + 256 = 126;
结果为超过范围的正数unsigned char ch = 682;ch = 170;682 - 256 = 426;
426 - 256 = 170;
有符号和无符号混合运算结果为负数char ch = -128;
unsigned char ch1 = 28;
ch1 += ch;
ch1 = 156-128 + 256 = 128;
128 + 128 = 156;
结果为正数char ch = -128;
unsigned char ch1 = 255;
ch1 += ch;
ch1 = 127;255 + (-128) = 127;

总结:

  • 超过该类型的正数结果——>该结果一直减该类型最大表示数字个数,直到在该类型范围内
  • 超过该类型的负数结果——>该结果一直加该类型最大表示数字个数,知道在该类型范围内
  • 不要使用无符号和有符号直接的隐式转换,很容易产生bug
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来鸟 鸣间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值