unsigned int a = 6;
int b = -20;
printf( "%s\n", (a+b) > 6 ? ">6" : "=<6" );
printf( "%d\n", (a+b) );在VC6.0上测试,输出为 >6
-14----------------------------------------------
资料上说,当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。但是为什么第二个输出没有转换呢?是不是只在条件表达式中才自动转换?
但printf( "%d\n", (a+b) );要求输出的带符号数,所以最后又转换成带符号数了
试试:
printf( "%u\n", (a+b) );
unsigned d=0;
d= a+b;
printf("%d, %u\n", d,d);