隐式类型转换和整型提升

Posted

tags:

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

c整型中的运算总是至少以缺省整型类型的精度来进行的,所以当字符型或者短整型在进行运算时为了获得这个精度,先要提升成普通整型,再运算。

例:

  char a=127;

  char b=1;

  char ret=a+b;


在进行运算时,先进行“整型提升”(提升成整形):

char类型的127 是:0111 1111

进行整型提升后是:00000000 00000000 00000000 01111111


char类型的1 是:0000 0001

整型提升后是:00000000 00000000 00000000 00000001


提升后在进行运算:

              00000000 00000000 00000000 01111111

              00000000 00000000 00000000 00000001

         结果 00000000 00000000 00000000 10000000

然后再发生截断:ret=1000 0000

在这个例子中计算的结果与算术结果没有区别,但是入股在下面这个例子中区别就大了:

ret=((a<<2)+b)>>2,

如果不进行整型提升,则当移位是会将高位丢失。


本文出自 “11132019” 博客,请务必保留此出处http://11142019.blog.51cto.com/11132019/1760079

以上是关于隐式类型转换和整型提升的主要内容,如果未能解决你的问题,请参考以下文章

C语言二操作符详解(隐式类型转换之整型提升,算术转换)

C语言隐式类型转换和算术转换详讲

C语言隐式类型转换和算术转换详讲

每天学一点系列~看得见摸不着的“隐式类型转换”

C语言中的隐式类型转换

操作符中表达式求值(隐式类型转换详解)以及操作符属性