找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1018|回复: 5
收起左侧

单片机C语言减法指令问题

[复制链接]
ID:1017978 发表于 2022-4-16 05:18 来自手机 | 显示全部楼层 |阅读模式
程序:if(k3==0){delay(20);if(k3==0){i=i+2;if(i≥10){i=10;}}}
if(k4==0){delay(20);if(k4==0){i=i-2;if(i≤0){i=0;}}}

问:为什么减到小于0后,i不等于0,而是一个很大的数。
回复

使用道具 举报

ID:91150 发表于 2022-4-16 10:30 | 显示全部楼层
本帖最后由 wjhhhhh 于 2022-4-16 10:32 编辑

小于、等于0后继续减2就变成了65533(0xFFFD,对应着char类型0~65535)。if(k4==0){i=i-2;if(i≤0){i=0;}}改成if((k4==0)&&(i>=2)){i=i-2;} 试一试。
回复

使用道具 举报

ID:301191 发表于 2022-4-16 16:55 | 显示全部楼层
顶一下
回复

使用道具 举报

ID:883242 发表于 2022-4-16 19:26 | 显示全部楼层
wjhhhhh 发表于 2022-4-16 10:30
小于、等于0后继续减2就变成了65533(0xFFFD,对应着char类型0~65535)。if(k4==0){i=i-2;if(i≤0){i=0;}} ...

关键问题在于i的类型,如果是unsigned那么你写的对,如果是signed那么楼主写的对,不用改,看到很大的数很可能是IDE显示的问题,不是写的有问题。
回复

使用道具 举报

ID:1017978 发表于 2022-4-17 19:18 来自手机 | 显示全部楼层
wjhhhhh 发表于 2022-4-16 10:30
小于、等于0后继续减2就变成了65533(0xFFFD,对应着char类型0~65535)。if(k4==0){i=i-2;if(i≤0){i=0;}} ...

有用,谢了,老哥
回复

使用道具 举报

ID:1017978 发表于 2022-4-17 19:18 来自手机 | 显示全部楼层
Hephaestus 发表于 2022-4-16 19:26
关键问题在于i的类型,如果是unsigned那么你写的对,如果是signed那么楼主写的对,不用改,看到很大的数 ...

有用,我两个都试了一下,确实是,谢了,老哥
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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