c语言表达式这一块,有一些意想不到的语法,比如我们来看这一题
很多人都会认为这太简单了,肯定的130,让我们看看
为什么会得到一个这样的数的-126???
是因为c语言的语法,隐式类型转换:整行提升,为了获得精度,表达式的字符和短整形操作数在使用之前会被转换为普通的整行。我们一步一步的来首先我们知道数字都是存的2进制的补码,正数的补码反码原码是一样的,负数是用就是加一,按位去反。
首先是这样,然后因为要算c,ab是char类型,所以使用是整形提升了,整形提升是按照变量的数据类型的符号来提升的,char是一个字节8个bit位,int是4个字节,32个bit位
然后取出c它是字符,一开始是100000010,在整形提升,因为是负数所以补1,做补反原换算
-126就得出来了,这就是c语言中的整形提升
然后还有一点,c语言中还有一种算术转换,算术转换:两个类型计算,先将小的转化为大的才能运算
记住这个表格就可以了