更换位范围

时间:2009-04-30 16:02:12

标签: mask boolean-logic bit

CS中的任何二年级学生都应该能够回答,但我似乎无法绕过它......

我有一组位,我需要用不同的集替换一些位。在一个简化的例子中:

10101010 - 原始位设置

00001111 -mask显示替换位置

00001100 - 新位值

10101100 - 结果位设置

另一个例子:

10101010 - 原始位设置

00110011 -mask

11111111 - 新位值

10111011 - 结果位设置

通过遍历这些位来做到这一点是微不足道的。

是否可以使用布尔逻辑(AND,OR等)来执行此操作?

3 个答案:

答案 0 :(得分:10)

result = (original & ~mask) | (newbits & mask)

“&〜mask”部分确保在|之前将这些位清除为0一部分。

“& mask”部分确保只使用newbits中的适当位。

答案 1 :(得分:1)

(新的和面具)或(旧的而不是面具)

答案 2 :(得分:0)

屏蔽掉原件中要替换的位(通过与掩码的NOT进行AND运算),然后将新位置于(通过OR)。

10101010 - 原始位设置

00001111 -mask显示替换位置

00001100 - 新位值

11110000 -negated mask

10100000 -original bitset masked

10101100 - 新位回到


在C(++)代码中,它将是:

out =(在&〜mask中)| newbits;

如果newbits包含他们应该替换的内容之外的位,那么他们也可以使用掩码。