先出几个题目,再解释一下为什么答案是那样的。
题目一:
int a = -1;
unsigned int b = 1;
printf("%d", a > b);
结果输出:1
因为无符号数与有符号数比较时,要将有符号数转化为无符号数,再来比较。a转化为无符号数后就是0xFFFFFFFF,肯定大于b
题目二:
char a = -1;
unsigned char b = 1;
printf("%d", a > b);
结果输出:0
奇怪了,怎么会这样?这是因为两者被转化为int了,a转化为int就表示-1,b转化为int 就是1,前者小于后者。注意了这里不是像题目一里一样简单的把char转化为unsigned char了
题目三:
int a = -1;
unsigned char b = -1;
printf("%d\n", a < b);
结果输出是:1
原因在于要把b转化为int就是0xFF当然大于-1了
题目四:
char a = -1;
unsigned int b = -1;
printf("%d\n", a == b);
结果输出:1
原因是char类型被扩展为unsigned int后与b相等,同为0xFFFFFFFF
下面给出我个人得出的一些结论:
无符号int与有符号int比较大小,转化为无符号int来比较
int类型与非无符号int的类型比较时,非无符号int的类型转化为int来比较
无符号int类型与其他类型如unsigned short,signed short,unsigned char, char 比较时,其他类型一律转化为无符号int类型来比较
非无符号int类型和非int类型如unsigned short,signed short,unsigned char, char 比较时,一律转化为int类型来比较