今天看面试宝典看到这样的一道题目
void foo(void){
unsigned int a = 6;
int b = -20;
(a+b>6)?puts(">6"):puts("<6");
}
问输出结果是什么
答案:>6
这个问题测试是否懂得C语言中的整数自动转换原则,有些开发者懂得极少这些东西。当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此,从这个意义上讲,无符号数的运算优先级要高于有符号数,这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。
现做个测试的例子
#include <stdio.h>
int main(){
unsigned int a = 6;
int b = -20;
//printf("a+b=%u\n",(a+b));
(a>b)?puts("6"):puts("-20");
return 0;
}
这程序的输出结果是什么
答案:-20
这就不难理解,在进行有符号数和无符号数比较时,先将有符号数转换为无符号数,再来比较
现在我们再看看这个程序
#include <stdio.h>
int main(){
unsigned int a = 6;
int b = -20;
printf("a+b=%u\n",(a+b));
(a+b>6)?puts(">6"):puts("<6");
return 0;
}
答案:a+b=4294967282
>6
注:%u 输出无符号十进制整数