C语言基础——整型提升
Posted Aline2021-yxz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言基础——整型提升相关的知识,希望对你有一定的参考价值。
整形提升:
在表达式计算时,各种整形首先要提升为int类型,如果int类型不足以表示则要提升为unsigned int类型;然后执行表达式的运算。
整形提升的原因与cpu运算数据效率和精度有关,就不介绍了,感兴趣的小伙伴可以自行了解
❗❗❗如何提升?
- 写出要整形提升的数据的补码
- 观察原变量是有符号还是无符号
- 有符号数在补码前面补变量里面存放的补码的最高位数字,无符号数在补码前面补0
- 提升完毕
道理大家都懂,不来个例子怎么理解
int main()
char a = 128;
int b = 100;
printf("%d\\n", a+b);
return 0;
在这里读者可以自己算一下结果,看看自己是否理解整型提升。
计算过程:
- char应该提升为int再与int计算
- 128的补码与源码相同为0000 0000 0000 0000 0000 0000 1000 0000,a为char类型8个bit位,所以a里面存放的是1000 0000
- a为有符号整形(不同编译器可能不同),在补码前面补a里面存放补码的最高位“1”
- 补位完成后为1111 1111 1111 1111 1111 1111 1000 0000,至此提升完毕
- 计算源码为:1000 0000 0000 0000 0000 0000 1000 0000,十进制数字为-128,
- 两整形运算-128+100=-28,至此计算完毕
额外补充:运算中只要出现浮点数,那么将所有数据都转换为double运算
以上是关于C语言基础——整型提升的主要内容,如果未能解决你的问题,请参考以下文章