[STM32F4] 为什么负数会比正数大?

[复制链接]
532|5
nuc990 发表于 2025-10-13 19:56 | 显示全部楼层 |阅读模式
supply, se, RF, AG, US, PP
本帖最后由 nuc990 于 2025-10-13 21:56 编辑

代码:
int16_t base_bag;
int32_t  perfuseSupplyVolume1;

  1. console.printf("base_bag=%d\r\n", base_bag);
  2.                                 console.printf("perfuseSupplyVolume1=%d\r\n", perfuseSupplyVolume1);
  3.                                 if (perfuseSupplyVolume1 >= base_bag)   
其中base_bag=2156;
perfuseSupplyVolume1=-15;

if条件竟然成立是什么原因??

keil MDK5.30编译器

probedog 发表于 2025-10-14 16:27 | 显示全部楼层
隐式类型转换 可能导致意外行为,但 -15 >= 2156 在正确转换下应为 false。
stormwind123 发表于 2025-10-14 16:29 | 显示全部楼层
统一比较的双方类型
七毛钱 发表于 2025-10-14 19:30 | 显示全部楼层
在Keil MDK中启用严格的类型检查警告
computer00 发表于 2025-10-14 18:03 | 显示全部楼层
检查一下你的int16_t和int32_t的定义,是不是定义成无符号的了?另外还有int是不是强制指定为无符号了?可以加上强制转换看看结果有没有变化:if ((signed long int)perfuseSupplyVolume1 >= (signed long int)base_bag)
dffzh 发表于 2025-10-15 17:25 | 显示全部楼层
两个变量你定义的都是有符号数,直接比较,是可以的呀,而且if条件不可能成立的,你再确认看下;
下面是我在Visual C++ IDE的仿真运行结果:
9431768ef68a4bdfff.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

115

主题

226

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部