标题: &= ~在单片机中起到什么作用 [打印本页]

作者: 1314love    时间: 2022-8-25 10:30
标题: &= ~在单片机中起到什么作用
a &= ~0x10
请问在单片机中&=~起到什么作用?
它跟|的作用一样吗?

作者: hcfat51h    时间: 2022-8-25 12:07
算一下不就知道了,0x10取反是0xEF;a&=0xEF就是把第a的bit4置零!
作者: xxxevery    时间: 2022-8-25 12:37
这个是c语言中常用的清零某一位的写法,0x10转换成二进制为00010000,~(00010000)= 11101111,
a  &  11101111 的结果就是a的4位必被清零,而其他位不会受影响。
而相类似的就是a |= 0x10, 也就是a = a | 00010000,结果就是a的4位被置1,而其他位不会受影响。这个语句就常拿来置1一个数的某一位
作者: Hephaestus    时间: 2022-8-25 12:40
a=a&(~0x10)能看懂吧?看不懂回去看教科书去。
作者: 188610329    时间: 2022-8-25 13:03
刚好是 | 的反操作,
作者: 小黑屋525    时间: 2022-8-25 13:23
等价于a = (a & (~0x10));
作者: lkc8210    时间: 2022-8-25 13:24
~:取反,~0x10 = ~B00010000 = B11101111 = 0xEF
&:与逻辑,A&=B, 等于 A=A&B
所以A&=~0x10 等于 A = A & 0xEF,目的是对第4位清零而不影响其它位

作者: sttt300    时间: 2022-8-25 13:34
这和是不是在单片机中没有关系,在其他地方也是一样的
a&=~0x10是先按位取反,再相与赋值,相当于a=a&(~0x10)=a&11101111,结果就是把a的第4位清零
|是或运算,见1出1,显然没有清零的功能
作者: tzs233    时间: 2022-8-25 14:07
等效于 a=a&(~0x01),即a=a&0xfe 目的是把bit0置0,即对某一位置0或置1 这样写看起来比较明朗,在一些库函数中这种写法比较多(如stm32),
作者: coody_sz    时间: 2022-8-25 16:24
a &= ~0x10,就是将0x10取反变成0xef,再和a与运算,结果送a
作者: 1314love    时间: 2022-8-25 17:04
lkc8210 发表于 2022-8-25 13:24
~:取反,~0x10 = ~B00010000 = B11101111 = 0xEF
&:与逻辑,A&=B, 等于 A=A&B
所以A&=~0x10 等于 A = A ...

明白了,谢谢
作者: 1314love    时间: 2022-8-25 17:05
xxxevery 发表于 2022-8-25 12:37
这个是c语言中常用的清零某一位的写法,0x10转换成二进制为00010000,~(00010000)= 11101111,
a  &  11 ...

明白了,谢谢




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1