2214|15

970

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

一个奇怪的问题,一个有符号的32位数与一个无符号的32号位比较大小的结果 是错误的 [复制链接]

 

邀请:@maychang   @damiaa   @vincentc543   @RichSJ   参与回复

一个奇怪的问题,一个有符号的32位数与一个无符号的32号位比较大小的结果 是错误的,下图中 je=-3  ,sbsj.baojing2=0  , 按说 if (je <=sbsj.baojing2) 比较后应该执行(1)处的代码,而现在的结果却是执行 (2)处的代码 即ELSE后的代码,请问是何原因,如何处理。

 

 

此帖出自stm32/stm8论坛

最新回复

拿不准就手动改一样的类型再比较(int)x == (int)y 这种。   详情 回复 发表于 2022-6-15 19:54
点赞 关注
 

回复
举报

2万

帖子

0

TA的资源

超级版主

沙发
 

图中已经明确表示出来了。-3是0xFFFFFFFD,作为无符号数当然大于0。

此帖出自stm32/stm8论坛

点评

je  是  int 不是 uint   详情 回复 发表于 2022-6-12 06:34
 
 

回复

148

帖子

0

TA的资源

一粒金砂(高级)

板凳
 

回复

114

帖子

6

TA的资源

一粒金砂(中级)

4
 

數字比較應該在同一個型別上才是.

這沒有甚麼奇怪的,就是不同型別的錯誤比較而已.

此帖出自stm32/stm8论坛
 
 
 

回复

2146

帖子

8

TA的资源

五彩晶圆(初级)

5
 

不算奇怪,就是C语言的隐式类型转换,,对照下边的几条规则就知道为啥了。。。

 

 

此帖出自stm32/stm8论坛

点评

感谢。还有个问题问一下,您这图是从哪本教材上截取的,我这儿几本书上都没写这么细致。  详情 回复 发表于 2022-6-12 11:11
非常感谢。那我遇到的这种情况是属于(5)还是(7)这种情况呢,具体发生了什么情况呢  详情 回复 发表于 2022-6-12 06:40
 
个人签名坐而言不如起而行
 
 

回复

970

帖子

0

TA的资源

五彩晶圆(初级)

6
 
maychang 发表于 2022-6-11 18:54 图中已经明确表示出来了。-3是0xFFFFFFFD,作为无符号数当然大于0。

je  是  int 不是 uint 

此帖出自stm32/stm8论坛

点评

4楼说得很清楚:必须将两个数转换成同样类型,才可以进行比较。  详情 回复 发表于 2022-6-12 08:10
问题就在于 je 是 int,而 baojing2 是 uint。这在你的图片中表示得很清楚不同类型的数,不能进行比较,否则可能出错。 你如果比较图中 maxdl2 和 baojing2,就不会出错,因为这两个同是 uint类型。  详情 回复 发表于 2022-6-12 08:08
 
 
 

回复

970

帖子

0

TA的资源

五彩晶圆(初级)

7
 
wsmysyn 发表于 2022-6-11 23:27 不算奇怪,就是C语言的隐式类型转换,,对照下边的几条规则就知道为啥了。。。    

非常感谢。那我遇到的这种情况是属于(5)还是(7)这种情况呢,具体发生了什么情况呢

此帖出自stm32/stm8论坛
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

8
 
一沙一世 发表于 2022-6-12 06:34 je  是  int 不是 uint 

问题就在于 je 是 int,而 baojing2 是 uint。这在你的图片中表示得很清楚不同类型的数,不能进行比较,否则可能出错。

你如果比较图中 maxdl2 和 baojing2,就不会出错,因为这两个同是 uint类型。

此帖出自stm32/stm8论坛
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

9
 
一沙一世 发表于 2022-6-12 06:34 je  是  int 不是 uint 

4楼说得很清楚:必须将两个数转换成同样类型,才可以进行比较。

此帖出自stm32/stm8论坛
 
 
 

回复

2870

帖子

4

TA的资源

五彩晶圆(中级)

10
 

本身把有符号数和无符号数比较就是脑袋有坑,学编程最基本的知识就是数据类型的定义,更何况是嵌入式编程!找几本免费的C语言教程很难吗?花时间学习一下不比在这里问更好吗。

此帖出自stm32/stm8论坛
 
 
 

回复

1025

帖子

0

TA的资源

纯净的硅(高级)

11
 

确实不算奇怪,就像32和"A“那个大,这和人的理解是不同的。

此帖出自stm32/stm8论坛
 
个人签名چوآن شـين
 
 

回复

970

帖子

0

TA的资源

五彩晶圆(初级)

12
 
wsmysyn 发表于 2022-6-11 23:27 不算奇怪,就是C语言的隐式类型转换,,对照下边的几条规则就知道为啥了。。。    

感谢。还有个问题问一下,您这图是从哪本教材上截取的,我这儿几本书上都没写这么细致。

此帖出自stm32/stm8论坛

点评

不是书上的,百度一下隐式类型转换规则就行,  详情 回复 发表于 2022-6-12 12:02
 
 
 

回复

2146

帖子

8

TA的资源

五彩晶圆(初级)

13
 
一沙一世 发表于 2022-6-12 11:11 感谢。还有个问题问一下,您这图是从哪本教材上截取的,我这儿几本书上都没写这么细致。

不是书上的,百度一下隐式类型转换规则就行,

此帖出自stm32/stm8论坛

点评

非常感谢。  详情 回复 发表于 2022-6-12 14:19
 
个人签名坐而言不如起而行
 
 

回复

970

帖子

0

TA的资源

五彩晶圆(初级)

14
 
wsmysyn 发表于 2022-6-12 12:02 不是书上的,百度一下隐式类型转换规则就行,

非常感谢。

此帖出自stm32/stm8论坛
 
 
 

回复

4771

帖子

12

TA的资源

版主

15
 

同类型比较才有意义,不同的话,我个人理解,例如四位的 有符号就是-7-6-5-4-3-2-101234567

0000  ->  0

0111  ->  7

1111  -> -7

1010  -> -2

.......

意思是第一位是符号位

无符号数

1111  ->  15

0000  -> 0

1010  ->  10

如果你的数小一点都是正的,兴许也能比大小(我猜的),但是一旦大到符号位是1了,那恐怕不能比较了哈。所以有无符号可是差别蛮大的。不知道我说的对不对啊?

此帖出自stm32/stm8论坛
 
 
 

回复

7452

帖子

18

TA的资源

五彩晶圆(高级)

16
 

拿不准就手动改一样的类型再比较(int)x == (int)y 这种。

此帖出自stm32/stm8论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表