C99标准:如果int能够表示原始类型中的所有数值,那么这个数值就被转成int型,否则,它被转成unsigned int型。这种规则被称为整型提升。所有其它类型都不会被整型提升改变。
学习c语言的朋友们也许都学到了int型与unsigned int型比较大小的方法。比如以下程序:
#include <stdio.h>
int main()
{
int a = -1;
unsigned int b = 1;
if(a > b){
printf("a = %d\n",a);
} else {
printf("b = %d\n",b);
}
return 0;
}
输出结果是: a = -1
原因在于int 型与unsigned int 型在自己没有进行强制转换的情况下进行比较。int类型在linux下默认强制转换为signed int类型进行比较,所以a与b比较的时候,a会自动转换成unsigned int类型进行比较。由于signed int的符号位最高位是1,转换成unsigned int之后,就会变成一个很大的unsigned int型正数,所以a与b比较时a会大于b。所以会输出a = -1;
而在遇到char 与 unsigned char 进行比较的时候,情况就不一样了。如一下程序:
#include <stdio.h>