C语言中为什么不能将无符号整数与有符号整数比较

如题所述

不是不能比,是你未比出正确结果,两个数的区间不一样,可以内码却有可能相同,你得如此比法,例如:
int si;
unsigned int ui;
ui = si = -100;
int res = (si<0) ? -1 : (ui>>31) ? 1 : (ui-si);
当有符号数小于0时,不用比,总是有符号的小,
当无符号数最高位为1时不用比,总是无符号位大,
有符号数不小于0而无符号数最高位不是1时才做比较,就可以得出正确结果
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-01-12
没这一说吧

int main()
{
int a;
unsigned b;

a=-1;
b=10;
if ( a>b)
printf("a>b\n");
else
printf("a<=b\n");
return 0;
}
以上会输出 a>b
因为在无符号与有符号数进行运算时(计算机中的运算,非数学意义上的运算),系统会自动将有符号数看成(也可以叫转换,实际没有转换)无符号数,然后进行比较。
举例:假定一个数是8位,一个字节表示
-1=11111111(补码),相当于无符号数255
10=00001010
第2个回答  2012-01-12
计算机组成原理有 有符号整数的最高位是1,无符号则可能为1可能为0,如果为0,比较会出错。
相似回答