1 有可能出现的问题
代码如下
#include <stdio.h>
int main ()
{
int a = -1;
unsigned int b = 1;
if (a < b) {
printf("a < b");
} else {
printf("a >= b");
}
return 0;
}
运行结果
2 产生以上问题的原因(整型提升)
在表达式计算时,各种整型首先要提升为int类型,如果int类型不足以表示则要提升为unsigned int类型;然后执行表达式的运算。
**为什么要使用整型提升:**表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU去执行运算