void foo(void)
{
unsigned int a = 6;
int b = -20;
(a+b > 6) ? puts("> 6") : puts("<= 6");
}
这无符号整型问题的答案是输出是 “>6”。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20最前面的-号不是负数的意思,是一个数字位,所以变成了一个非常大的正整数,所以该表达式计算出的结果大于6
这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。
额外举例
#include<stdio.h>
int main()
{
unsigned int a = 6;
int c=6;
int b = -20;
(a > b) ? puts("> 6") : puts("<= 6");
(c > b) ? puts("> 6") : puts("<= 6");
}