'&=〜'在c ++中做什么?

时间:2019-06-24 21:57:42

标签: c++

我正在浏览一些c ++代码,并看到了以下内容,据我所知,我想知道它的作用。除了“波浪号是毁灭者”之外,我没有在网上看到其他任何东西

#define i2c_scl_release()                 \
    *_sclDirReg &=~ _sclBitMask

我理解这个定义,但是我想弄清楚&=~的作用。

忽略任何最佳做法/格式问题。我在github上找到了它,它与我正在查看的内容有关,因此我想了解它。两者都键入uint8_t。谢谢!

5 个答案:

答案 0 :(得分:2)

*_sclDirReg &=~ _sclBitMask

可以读取为:

*_sclDirReg =  *_sclDirReg &  (~_sclBitMask)

那一行代码:

  • _sclDirReg(必须是指针)中读取值
  • 将其与_sclBitMask的按位求逆
  • 将结果写回到_sclBitMask

答案 1 :(得分:1)

a &=~ b

等效于:

a = a & (~b)

&~都是按位运算符:&是按位运算符,而~是按位运算符。

See Wikipedia for more info

答案 2 :(得分:0)

它采用_sclBitMask的逆位掩码,并使用按位的_sclDirReg运算符将其组合为and所指向的内容。

您可以将其重写为:

*_sclDirReg = *_sclDirReg & (~sclBitmask);

答案 3 :(得分:0)

首先将位掩码反转~ _sclBitMask,然后从_sclBitMask*_sclDirReg &=中设置的所有位中清除指向的变量。

通过这种方法,您可以重置_sclDirReg中属于彼此的某些位标志,而无需触摸其中的其余位标志。

答案 4 :(得分:0)

清除*_sclDirReg_sclBitMask中已设置(等于1)的位(设置为零):

 *_sclDirReg =  *_sclDirReg &  (~_sclBitMask)