表达式的整形运算在CPU的相应运算器件内执行, CPU内整型运算器的操作数的字节长度一般就是int的字节长度,那么当表达式中存在char与short类型时,可能会进行整形提升,转换为CPU内整型操作数的标准长度。
那如何进行整形提升呢?
整形提升是按照变量的数据的符号位来提升的。符号分为正号与负号两类。整形提升也可分为正数的整形提升与负数的整形提升。
正数的整形提升:
以char类型变量c来说。char a=1;
变量a的二进制(补码)中只有8个比特位:000000001
整形提升时高位补符号位。
char类型为有符号的char 为正高位补0
负数的整形提升:
以char类型变量b来说。char b=-1;
变量b的二进制(补码)中只有8个比特
位:111111111 char为有符号的char 高位补符号位1 整形提升后为11111111111111111111111111111111
-1的原码 反码(保留符号位其他取反)
补码(反码+1)
原码1000000000000000000000000000000001
反码11111111111111111111111111111111110
补码11111111111111111111111111111111111
无符号数高位补0
接下来看例题:
以%d形式打印char类型数
还有下面两种情况存在整形提升。
表达式+c与表达式-c出现整形提升字节长度转换为标准字节长度sizeof(int)。
char类型变量a与short类型变量b发生整形提升,而int类型变量不需要整形提升。所以运行结果会打印出c。