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

 我来答
靓丽还清湛的标兵5177
推荐于2017-11-24 · TA获得超过1649个赞
知道小有建树答主
回答量:1032
采纳率:100%
帮助的人:974万
展开全部
不是不能比,是你未比出正确结果,两个数的区间不一样,可以内码却有可能相同,你得如此比法,例如:
int si;
unsigned int ui;
ui = si = -100;
int res = (si<0) ? -1 : (ui>>31) ? 1 : (ui-si);
当有符号数小于0时,不用比,总是有符号的小,
当无符号数最高位为1时不用比,总是无符号位大,
有符号数不小于0而无符号数最高位不是1时才做比较,就可以得出正确结果
kaixingui2012
2012-01-12 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6171万
展开全部
没这一说吧

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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhangdebo321
2012-01-12 · TA获得超过203个赞
知道小有建树答主
回答量:262
采纳率:100%
帮助的人:194万
展开全部
计算机组成原理有 有符号整数的最高位是1,无符号则可能为1可能为0,如果为0,比较会出错。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式