C语言基础——整型提升

Posted Aline2021-yxz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言基础——整型提升相关的知识,希望对你有一定的参考价值。

整形提升:

在表达式计算时,各种整形首先要提升为int类型,如果int类型不足以表示则要提升为unsigned int类型;然后执行表达式的运算。

整形提升的原因与cpu运算数据效率和精度有关,就不介绍了,感兴趣的小伙伴可以自行了解

❗❗❗如何提升

  1. 写出要整形提升的数据的补码
  2. 观察原变量是有符号还是无符号
  3. 有符号数在补码前面补变量里面存放的补码的最高位数字,无符号数在补码前面补0
  4. 提升完毕

道理大家都懂,不来个例子怎么理解

int main()

	char a = 128;
	int b = 100;

	printf("%d\\n", a+b);
	return 0;


在这里读者可以自己算一下结果,看看自己是否理解整型提升。

计算过程:

  1. char应该提升为int再与int计算
  2. 128的补码与源码相同为0000 0000 0000 0000 0000 0000 1000 0000,a为char类型8个bit位,所以a里面存放的是1000 0000
  3. a为有符号整形(不同编译器可能不同),在补码前面补a里面存放补码的最高位“1”
  4. 补位完成后为1111 1111 1111 1111 1111 1111 1000 0000,至此提升完毕
  5. 计算源码为:1000 0000 0000 0000 0000 0000 1000 0000,十进制数字为-128,
  6. 两整形运算-128+100=-28,至此计算完毕

额外补充:运算中只要出现浮点数,那么将所有数据都转换为double运算

以上是关于C语言基础——整型提升的主要内容,如果未能解决你的问题,请参考以下文章

关于整型提升(C语言)

C语言整型提升

C语言 - 隐式类型转换

C语言中整型数组的每个元素在内存中是如何存放的

C语言,输入一个整数,从高位开始逐位分割并输出它的各位数字

C语言基础——整型提升