整型提升

原创 2016年06月01日 15:01:49

K&R C中定义整型提升:
1. 只要一个表达式中用到了整型值,那么类型为char、short int活整型位域(这几者带符号或无符号均可)的变量,以及枚举类型的对象,都可以被放在这个整型变量的位置。
2. 如果1)中的变量的原始类型值域可以被int表示,那么原值被转换为int;否则的话,转为unsigned int。

这段话理解起来是不是有点困难,我们来举个例子理解起来就简单了

    char a = '2';
    char b = '4';
    char c = a + b;
    printf("%c\n",c);

在上述过程中,尽管两个运算符”+”和”=”的操作数全为char型,但在中间计算过程中存在着整数提升:对于表达式a+b ,a、b都是char型,因此被提升至int型后,执行“+”运算,计算结果(int型)再赋值给c(char型),又执行了隐式的类型转换。

是不是觉得很不可思议。
其实可以通过一种方式来验证它:
printf(“%d”, sizeof(a + b));
大家猜猜输出的值是多少?1,对吗?很遗憾,不是1,大小是4
这是为什么呢,显然a+b进行了整型提升,而没有来得及将int型的值赋值给c(char型),所以大小就成了4。

ANSI C规定,编译器如果能保证保证运算结果一致,也可以省略类型提升的操作——这通常出现在表达式中存在常量操作数的时候。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

关于C语言整型提升的讲解

C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为“整型提升”。 首先,我们需要知道整型提升的规则: 1.若...

算术转化和整型提升的奥秘

首先请大家先思考一下3个问题,问题相互之间是有关联的。 1,整型字面值是属于整型家族9种中的哪一种呢? 2,什么是算术转换?如何转换的? 3,什么是整型提升?如何提升的?为什么会有整形提升? 下面...

C中的整型提升

【作者】        陈亮 【时间】        2008-09-17 【摘要】      本文主要讲述了整形提升的基本概念并举例说明。 背景技术 写这篇文章是因为一位同事指出了我在产...
  • fyfcauc
  • fyfcauc
  • 2014年08月26日 10:12
  • 315

C语言中的数值类型转换:整型提升/寻常算术变化/截断/强制类型转换

整型提升: K&R C中关于整型提升(integral promotion)的定义为: "A character, a short integer, or an integer bit-fie...

整型提升 和 位操作

http://blog.chinaunix.net/uid-26758020-id-3143673.html  现在正在学习,看见这个博客真是太好了。。。 1.#对计算机不存在有无符号数...
  • zyx6a
  • zyx6a
  • 2013年04月01日 21:55
  • 602

C语言 sizeof 整型提升 类型转换

如有错误请留言告知,谢谢! C语言中整型提升的概念: If an int canrepresent all the values of the original type, then the ...

c 整型提升和算数转换

相关概念说明:   1:整型提升 如果char、short int或者int型位段(bit-field),包括它们有符号或无符号变型,以及枚举类型,可以使用在需要int或者unsigned in...
  • xxz1014
  • xxz1014
  • 2014年11月07日 16:35
  • 500

C进阶指南(1):整型溢出和类型提升、内存申请和管理

原文地址:http://pfacka.binaryparadise.com/articles/guide-to-advanced-programming-in-C.html 翻译地址:http:...

关于整型的表示方法和范围问题

  • 2015年09月10日 08:54
  • 244KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:整型提升
举报原因:
原因补充:

(最多只允许输入30个字)