找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2107|回复: 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单片机,请大家帮忙看一下问题出在哪儿


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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 原来还要考虑结合性

查看全部评分

回复

使用道具 举报

5#
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 解答得很详细,非常感谢!!!

查看全部评分

回复

使用道具 举报

6#
ID:861694 发表于 2024-2-2 14:25 | 只看该作者
感谢小伙伴们的回复,问题已解决,谢谢
回复

使用道具 举报

7#
ID:1057978 发表于 2024-2-2 14:25 | 只看该作者
说明if(NONE & 0x02==0x02)里面先执行了0x02==0x02然后才与NONE做与运算。
说明想实现你的目的你得加括号:if((NONE & 0x02)==0x02)
回复

使用道具 举报

8#
ID:458247 发表于 2024-2-2 16:08 | 只看该作者
夏至浅浅落 发表于 2024-2-2 12:19
“=”号有右结合性,先计算0x02==0x02,再计算NONE &

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

使用道具 举报

9#
ID:1004920 发表于 2024-2-2 16:40 | 只看该作者
如果对运算符号的优先级不太了解的话,个人建议先运算的地方加括号。
回复

使用道具 举报

10#
ID:1110596 发表于 2024-2-3 10:35 | 只看该作者
要考虑优先级
回复

使用道具 举报

11#
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 单片机教程网

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