整型提升

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

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/db199410/article/details/51556060
文章标签: c语言
个人分类: C语言
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

整型提升

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭