有符号类型与无符号类型之间的转换

void foo(void)

{

     unsigned int a = 6;

     int b = -20;

     (a+b > 6) ? puts("> 6") : puts("<= 6");

}

printf("b = %#x\n",b);

b = 0xffffffec

这个问题测试你是否懂得C语言中的整数自动转换原则;

这无符号整型问题的答案是输出是“>6”。

原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。


posted @ 2012-07-08 10:14  wdliming  阅读(326)  评论(0编辑  收藏  举报