找回密码
 立即注册
查看: 245|回复: 4

请高手分析分析按键加正常,按键减会出现负数什么原因

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:119
  • 最近打卡:2026-04-06 07:58:43

53

主题

53

回帖

771

积分

高级会员

积分
771
发表于 2025-11-7 15:48:03 | 显示全部楼层 |阅读模式
我写了一个按键调整参数,按键加正常,到100、200、48再增加,但按键减,出现负数,请高手分析分析什么原因,程序如下:


                                                           if (KEY3==0)
                                                                {
                                                                        delayms(20);
                                                                        if (KEY3==0)
                                                                                {                                                               
                                                                                        while(!KEY3);
                                                                                       
                                                                                        if(SET3)
                                                                                        {
                                                                                                        CHa1++;
                                                                                                        if(CHa1>100)CHa1=100;
                                                                                        }
                                                                                        else if(SET2==0)
                                                                                                                {
                                                                                                                        SHi++;
                                                                                                                        if(SHi>48)SHi=48;        
                                                                                                                }
                                                                                                                else
                                                                                                                {        
                                                                                                                        CHa++;
                                                                                                                        if(CHa>200)CHa=200;                                                                                       
                                                                                                                }
                                                                                }
                                                                }
                                                        if (KEY1==0)
                                                                {
                                                                        delayms(20);
                                                                        if (KEY1==0)
                                                                                {        
                                                                                        while(!KEY1);
                                                                                        if(SET3)
                                                                                                {
                                                                                                        CHa1--;
                                                                                                        if(CHa1<0)CHa1 = 0;
                                                                                                }else if (SET2==0)
                                                                                                                                {
                                                                                                                                        SHi--;
                                                                                                                                        if(SHi<0)SHi = 0;        
                                                                                                                                }
                                                                                                                        else
                                                                                                                                {
                                                                                                                                        CHa--;
                                                                                                                                        if(CHa<0)CHa = 0;                                                                                                                        
                                                                                                                                }                                                                                                
                                                                                }
                                                                }  

我把 CHa1<0 改为    CHa1<1,他到1就停到1,奇怪


回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:684
  • 最近打卡:2026-04-05 21:09:24

9

主题

622

回帖

4342

积分

论坛元老

积分
4342
发表于 2025-11-7 20:07:00 | 显示全部楼层
无符号变量做递减处理时,要先判断变量是不是大于0,确定大于0再减1,
你的代码是先减再判断,这样当前变量为0时,就会有0-1问题,无符号变量就是溢出错误,有符号变量结果是-1


回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:631
  • 最近打卡:2026-04-06 10:16:03

30

主题

144

回帖

733

积分

高级会员

积分
733
发表于 2025-11-7 20:33:34 | 显示全部楼层
if(SHi<0)SHi = 0; 改写成if(SHi<1)SHi = 0; 即可
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:119
  • 最近打卡:2026-04-06 07:58:43

53

主题

53

回帖

771

积分

高级会员

积分
771
发表于 2025-11-9 14:17:49 | 显示全部楼层
网*** 发表于 2025-11-7 20:07
无符号变量做递减处理时,要先判断变量是不是大于0,确定大于0再减1,
你的代码是先减再判断,这样当前变量为0 ...

非常感谢,受教受教,对,变量是无符号,如果是变量是有符号是不是就不会出现上述问题
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:119
  • 最近打卡:2026-04-06 07:58:43

53

主题

53

回帖

771

积分

高级会员

积分
771
发表于 2025-11-9 14:18:48 | 显示全部楼层

十分感谢回复
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-4-6 22:41 , Processed in 0.112917 second(s), 64 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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