6

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

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

10101010 - 原始位设置

00001111 - 显示替换位置的掩码

00001100 - 新位值

10101100 - 结果位设置

另一个例子:

10101010 - 原始位设置

00110011-面具

11111111 - 新位值

10111011 - 结果位设置

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

是否可以使用布尔逻辑(AND、OR 等)来做到这一点?

4

3 回答 3

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

"& ~mask" 部分确保在 | 之前将这些位清除为 0。部分。

“& 掩码”部分确保只使用 newbits 中的正确位。

于 2009-04-30T16:08:01.713 回答
1

(新的和面具)或(旧的和非面具)

于 2009-04-30T17:05:14.960 回答
0

将要替换的位从原始位中屏蔽掉(通过与掩码的 NOT 进行与运算),然后将新位放入(通过 OR)。

10101010 - 原始位设置

00001111 - 显示替换位置的掩码

00001100 - 新位值

11110000 - 否定掩码

10100000 - 原始位集被屏蔽

10101100 - 新钻头放回


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

out = (in & ~mask) | 新比特;

如果 newbits 包含它们应该替换的位之外的位,并且它们也带有掩码。

于 2009-04-30T16:11:57.493 回答