CS中的任何二年级学生都应该能够回答,但我似乎无法绕过它......
我有一组位,我需要用不同的集替换一些位。在一个简化的例子中:
10101010 - 原始位设置
00001111 -mask显示替换位置
00001100 - 新位值
10101100 - 结果位设置
另一个例子:
10101010 - 原始位设置
00110011 -mask
11111111 - 新位值
10111011 - 结果位设置
通过遍历这些位来做到这一点是微不足道的。
是否可以使用布尔逻辑(AND,OR等)来执行此操作?
答案 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包含他们应该替换的内容之外的位,那么他们也可以使用掩码。