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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用位掩码来允许/禁止某些位的操作相关的知识,希望对你有一定的参考价值。

我有一个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 ...我不知道。

关于标记。

答案
new_value = (value & locked) | (incoming & ~locked);

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

以上是关于如何使用位掩码来允许/禁止某些位的操作的主要内容,如果未能解决你的问题,请参考以下文章

这个按位汉明(31,26)编码器如何在 C 中工作? (位掩码)

如何使用位掩码在 Swift 2.2 中自定义 UIControlState?

什么是位掩码?

位掩码和 Air724 LTE 模块

位掩码:如何确定是不是只设置了一位

如何从 __m64 值的 lsb 创建一个 8 位掩码?