找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1780|回复: 10
收起左侧

关于C语言与运算“&”的问题

[复制链接]
ID:861694 发表于 2024-2-2 10:18 | 显示全部楼层 |阅读模式
代码如下:

            if(NONE & 0x02==0x02) LED2 = ON1;else LED2 = OFF1;

问题:为什么 NONE=0x01时,也会执行 LED2=ON1,NONE & 0x02 不应该等于0吗?

用的是STC15W单片机,请大家帮忙看一下问题出在哪儿


回复

使用道具 举报

ID:861694 发表于 2024-2-2 11:22 | 显示全部楼层
我改成下面这样,却可以
DAT = NONE & 0x01;
if(DAT==0x01) LED1 = ON2;else LED1 = OFF2;
DAT = NONE & 0x02;
if(DAT==0x02) LED2 = ON1;else LED2 = OFF1;
回复

使用道具 举报

ID:275826 发表于 2024-2-2 11:58 | 显示全部楼层
先进行==运算,后进行&运算

评分

参与人数 1黑币 +10 收起 理由
戡拤 + 10 是优先级的问题

查看全部评分

回复

使用道具 举报

ID:452475 发表于 2024-2-2 12:19 | 显示全部楼层
  “=”号有右结合性,先计算0x02==0x02,再计算NONE &

评分

参与人数 1黑币 +10 收起 理由
戡拤 + 10 原来还要考虑结合性

查看全部评分

回复

使用道具 举报

ID:1045628 发表于 2024-2-2 13:39 | 显示全部楼层
如果对运算符号的优先级没有把握,请多使用小括号
  if(NONE & 0x02==0x02) LED2 = ON1;else LED2 = OFF1;
等效于  if(NONE & 0x01) LED2 = ON1;else LED2 = OFF1;
当NONE等于1时自然LED2 = ON1

评分

参与人数 1黑币 +15 收起 理由
戡拤 + 15 解答得很详细,非常感谢!!!

查看全部评分

回复

使用道具 举报

ID:861694 发表于 2024-2-2 14:25 | 显示全部楼层
感谢小伙伴们的回复,问题已解决,谢谢
回复

使用道具 举报

ID:1057978 发表于 2024-2-2 14:25 | 显示全部楼层
说明if(NONE & 0x02==0x02)里面先执行了0x02==0x02然后才与NONE做与运算。
说明想实现你的目的你得加括号:if((NONE & 0x02)==0x02)
回复

使用道具 举报

ID:458247 发表于 2024-2-2 16:08 | 显示全部楼层
夏至浅浅落 发表于 2024-2-2 12:19
“=”号有右结合性,先计算0x02==0x02,再计算NONE &

不是结合性的原因。"=="优先级是7,"&"优先级是8,先进行优先级高的运算
回复

使用道具 举报

ID:1004920 发表于 2024-2-2 16:40 | 显示全部楼层
如果对运算符号的优先级不太了解的话,个人建议先运算的地方加括号。
回复

使用道具 举报

ID:1110596 发表于 2024-2-3 10:35 | 显示全部楼层
要考虑优先级
回复

使用道具 举报

ID:1110596 发表于 2024-2-3 10:37 | 显示全部楼层
要考虑优先级的问题,可以改成这样:
if((NONE & 0x02)==0x02) LED2 = ON1;else LED2 = OFF1;
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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