一. 简介
前面一篇文章简单学习了 C语言中的整形提升。文章如下:
本文再举例说明 C语言随处可见的整型提升的代码示例。
二. C语言中整形提升举例说明
1. 什么是整形提升?
C语言的表达式中的 字符型(即 char)和短整型(即 short)类型数据在做一些运算之前,被转换成普通整型 int类型,这种转换叫做整型提升。
2. C语言中整形提升举例说明
(1) 举例一
代码如下:
#include <stdio.h>
int main(void)
{
char c = 1;
printf("%u\n", sizeof(c));
printf("%u\n", sizeof(+c));
printf("%u\n", sizeof(-c));
return 0;
}
c是 char类型,sizeof(c) 就是 1。
c是 char类型,而 在 +c、-c 中,c 都参与了运算,所以,会进行整型提升,整型提升为 int类型,所以,sizeof(+c) ,sizeof(-c) 都为 4。
(2) 举例二
打印 如下代码的输出值
#include <stdio.h>
int main()
{
char a = -128;
printf("%u\n",a);
return 0;
}
- -128 的原码:10000000 00000000 00000000 10000000
- -128 的反码:11111111 11111111 11111111 01111111
- -128 的补码:11111111 11111111 11111111 10000000
- 执行了 char a = -128 后,a 截断 10000000
- 整形提升后为:11111111 11111111 11111111 10000000
- 所以最后输出:11111111 111111111 1111111 10000000 ,对应的十进制数,是一个很大的数
(3) 举例三
如下也是一段代码也存在 整型提升
#include <stdio.h>
int main()
{
char a = 128;
printf("%u\n",a);
return 0;
}
- 128补码:
10000000 00000000 00000000 10000000
- 截断:a补码:
10000000
- 整形提升:
11111111111111111111111110000000
- 所以最后输出
11111111111111111111111110000000
对应的数,一个很大的数
整形提升是真实存在的,但是我们平时感觉不到他的存在
其他数据类型如 int
, float
,double
等大于等于 int
类型的操作符,之间的转换,就要用到算术转换了。