如何使用位掩码来允许/禁止某些位的操作
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 中工作? (位掩码)