如何使用位掩码来允许/禁止某些位的操作

问题描述 投票:0回答:1

我有一个32位值,代表32个独立状态。我还具有另一个32位值,该值控制哪些位被锁定或可以由应用程序更改。

例如(为简洁起见使用4位掩码)

Example 1
Value          1010
Lock Mask      1000 - i.e. the 4th bit is locked, i.e. can't be altered
Incoming value 0100
New Result     1100 - 4th bit unchanged

Example 2
Value          0011
Lock Mask      1000 - i.e. the 4th bit is locked, i.e. can't be altered
Incoming value 1100
New Result     0111 - 4th bit unchanged

有人可以请我解释一下如何实现这一目标。也许我需要更改掩码,以使其显示可以更改的位,即上述示例中的0111 ...我不知道。

关于标记。

bit bitmask
1个回答
0
投票
new_value = (value & locked) | (incoming & ~locked);

如果您认为它更具可读性,则可以使用+代替|

© www.soinside.com 2019 - 2024. All rights reserved.