设置二进制数等于设置了掩码的其他二进制数

时间:2019-10-26 22:24:19

标签: c bit-manipulation

我有以下三个值:

PORTB  = 00011011
Mask   = 00000111
Value  = 00100110

使用这些值,我试图将PORTB设置为等于Mask设置为1的Value。输出如下:

Output = 00011110

如您所见,我并没有弄错PORTB的前5位。尽管我正在设置最后三位。当然,如果“掩码”和“值”更加复杂,情况就不会如此。似乎没有一个运算符可以帮助我解决这个问题,我做了以下尝试:

Mask    = 00000111
Value   = 00100110
------------------ AND
PORTB   = 00011011
Output1 = 00000110
------------------ ??? This is where I get stuck, my first step doesn't seem to help much...
Output2 = 00011110

我希望有人能帮助我,因为我在网上找不到任何可以帮助我的解决方案/答案。

1 个答案:

答案 0 :(得分:1)

如果我正确理解,那应该就是您要寻找的

PORTB = (PORTB & ~Mask) | (Value & Mask);

这就是它的作用

PORTB   = 00011011
~Mask   = 11111000 
------------------ AND
Output1 = 00011000

Value   = 00100110 
Mask    = 00000111 
------------------ AND
Output2 = 00000110


Output1 = 00011000
Output2 = 00000110
------------------ OR
Output  = 00011110