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

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

10101010 - 原始位设置

00001111 -mask显示替换位置

00001100 - 新位值

10101100 - 结果位设置

另一个例子:

10101010 - 原始位设置

00110011 -mask

11111111 - 新位值

10111011 - 结果位设置

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

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

有帮助吗?

解决方案

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

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

“&掩模"部分确保只使用newbits中的适当位。

其他提示

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

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

10101010 - 原始位设置

00001111 -mask显示替换位置

00001100 - 新位值

11110000 -negated mask

10100000 -original bitset masked

10101100 - 新位回到


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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top