日期:2014-05-16  浏览次数:20567 次

为何下面的代码一样的表达式输出不一样的结果
#include <stdio.h>
int main(void)
{
unsigned int a = 6;
int b = -20;
int c = a + b;
printf("%d\n",c);
((a + b) > 6)?puts(">6"):puts("<=6");
}
输出结果为   -14    >6

当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型,那为何还会输出-14?

------解决方案--------------------
C语言中对于表达式中存在有符号数和无符号类型时,将对计算过程进行如何处理,经常听到的说法是:

“当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型”

以上这种表述是不准确的,正确的结论应为:

“当表达式中存在有符号类型和无符号类型时,默认情况下计算的结果将转化为无符号类型”

而对于计算过程而言,变量本身转化为有符号还是无符号数,都不会改变在计算机中存储的位状态。
------解决方案--------------------
有无符号是对人/编译器来说的,计算机只关心二进制。