首页 > 编程语言 > 详细

C语言数据类型提升

时间:2020-09-26 09:26:52      阅读:44      评论:0      收藏:0      [点我收藏+]

C代码在遇到数据类型不一致的情况时,编译器会进行自动数据类型提升。

自动转换遵循以下规则:

  1. 如果两种类型字节数不同,则转换成字节数高的类型。
  2. 如果两种类型字节数相同,但一种有符号,一种无符号,则转换成无符号类型
  3. 所有浮点都是以双精度类型进行的,即使只含有单精度运算的表达式,也要先转换成double型,再作运算。

如下图所示:
技术分享图片

一般情况下,自动数据类型提升不会引起代码问题,但是需要特别注意的是uint和int类型比较语句时,可能会引起代码逻辑问题。看如下例子:

int32_t  a = -1;
uint32_t b =  1;
if (a > b) {
  printf("a > b\n");
} else {`
  printf("a < b\n");
}

如果我们没有注意到数据类型不一致,而写出了类似上边的代码。由于编译器的自动数据类型提升,代码执行的时候,会将int32_t a转换为uint32_t类型,导致判断语句中"(uint32_t)a"会大于b,从而执行错误的代码逻辑。(本意应该是a < b)
对于这种情况,一种方案是我们将数据类型定义一致;另一种方案是加显示的数据类型转换,如if(a > (int32_t)b)。

C语言数据类型提升

原文:https://www.cnblogs.com/arthurchn/p/13732910.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!