找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1878|回复: 11
打印 上一主题 下一主题
收起左侧

&= ~在单片机中起到什么作用

[复制链接]
跳转到指定楼层
楼主
ID:1041297 发表于 2022-8-25 10:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
a &= ~0x10
请问在单片机中&=~起到什么作用?
它跟|的作用一样吗?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:466505 发表于 2022-8-25 12:07 | 只看该作者
算一下不就知道了,0x10取反是0xEF;a&=0xEF就是把第a的bit4置零!
回复

使用道具 举报

板凳
ID:59202 发表于 2022-8-25 12:37 | 只看该作者
这个是c语言中常用的清零某一位的写法,0x10转换成二进制为00010000,~(00010000)= 11101111,
a  &  11101111 的结果就是a的4位必被清零,而其他位不会受影响。
而相类似的就是a |= 0x10, 也就是a = a | 00010000,结果就是a的4位被置1,而其他位不会受影响。这个语句就常拿来置1一个数的某一位
回复

使用道具 举报

地板
ID:883242 发表于 2022-8-25 12:40 | 只看该作者
a=a&(~0x10)能看懂吧?看不懂回去看教科书去。
回复

使用道具 举报

5#
ID:624769 发表于 2022-8-25 13:03 来自手机 | 只看该作者
刚好是 | 的反操作,
回复

使用道具 举报

6#
ID:546770 发表于 2022-8-25 13:23 | 只看该作者
等价于a = (a & (~0x10));
回复

使用道具 举报

7#
ID:161164 发表于 2022-8-25 13:24 | 只看该作者
~:取反,~0x10 = ~B00010000 = B11101111 = 0xEF
&:与逻辑,A&=B, 等于 A=A&B
所以A&=~0x10 等于 A = A & 0xEF,目的是对第4位清零而不影响其它位
回复

使用道具 举报

8#
ID:647261 发表于 2022-8-25 13:34 | 只看该作者
这和是不是在单片机中没有关系,在其他地方也是一样的
a&=~0x10是先按位取反,再相与赋值,相当于a=a&(~0x10)=a&11101111,结果就是把a的第4位清零
|是或运算,见1出1,显然没有清零的功能
回复

使用道具 举报

9#
ID:509408 发表于 2022-8-25 14:07 | 只看该作者
等效于 a=a&(~0x01),即a=a&0xfe 目的是把bit0置0,即对某一位置0或置1 这样写看起来比较明朗,在一些库函数中这种写法比较多(如stm32),
回复

使用道具 举报

10#
ID:1034262 发表于 2022-8-25 16:24 | 只看该作者
a &= ~0x10,就是将0x10取反变成0xef,再和a与运算,结果送a
回复

使用道具 举报

11#
ID:1041297 发表于 2022-8-25 17:04 | 只看该作者
lkc8210 发表于 2022-8-25 13:24
~:取反,~0x10 = ~B00010000 = B11101111 = 0xEF
&:与逻辑,A&=B, 等于 A=A&B
所以A&=~0x10 等于 A = A ...

明白了,谢谢
回复

使用道具 举报

12#
ID:1041297 发表于 2022-8-25 17:05 | 只看该作者
xxxevery 发表于 2022-8-25 12:37
这个是c语言中常用的清零某一位的写法,0x10转换成二进制为00010000,~(00010000)= 11101111,
a  &  11 ...

明白了,谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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