查看: 88|回复: 2

[IT] C语言中有符号的与无符号的if比较结果不正确?

[复制链接]

5448

主题

5448

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
16354
发表于 2020-6-26 16:56:31 | 显示全部楼层 |阅读模式




附件的图片是我解的测试程序,赋值有符号的变量b=-1,无符号的变量a=1200,然后他们之间比较,结果显示b大于或等于a。大家谁能帮我解释下这个问题吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?在线注册

x
回复

使用道具 举报

0

主题

1794

帖子

201

积分

中级会员

Rank: 3Rank: 3

积分
201
发表于 2020-6-26 16:56:45 | 显示全部楼层
因为它们的类型不同,在进行比较前,先自动类型转换:
[url=https://iknow-pic.cdn.bcebos.com/c2fdfc039245d688ed4501fcabc27d1ed21b2426][/url]
b的值-1就按unsigned int 转换为4294967295,然后跟1200比较,它就出现b>a的情况了。
你不妨unsigned int c=4294967295;
然后,if(b==c)printf("b==c");试试看,是不是这样?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?在线注册

x
回复 支持 反对

使用道具 举报

0

主题

1855

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
发表于 2020-6-26 16:57:38 | 显示全部楼层
如上所言,两数转为无符号数后再进行比较。-1是最大的无符号整数
[url=https://iknow-pic.cdn.bcebos.com/29381f30e924b8992cf9c46061061d950b7bf6a5][/url]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?在线注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 在线注册

本版积分规则

QQ|手机版|Archiver|我要投稿|洛阳IT论坛 ( 豫ICP备18021590号 )|网站地图

GMT+8, 2020-9-25 18:38 , Processed in 0.165162 second(s), 25 queries .

Powered by 洛阳IT论坛网 X3.2

© 2018-2025 China Inc.

快速回复 返回顶部 返回列表