我对如何使用按位运算将位间隔从数字 X 交换到数字 Y 很感兴趣。
例如我有数字:
X = 00000000 Y = 00111111
位置开始,位置结束
我想用相同位置的 Y 中的位替换 X 中的 [positionStart, positionEnd] 位。
最佳答案
如果您有一个掩码 m
指示您要移动或交换的位,您可以像这样移动它们:
x = x ^ ((x ^ y) & m)
或者像这样交换它们:
t = (x ^ y) & m
x ^= t
y ^= t
这可以解释为取 x
和 y
之间的位差,仅在设置了 m
的地方。然后对 x
进行异或运算,翻转 x
中的位,其中 x
和 y
不同(而 m
已设置),因此它将 x
的那些位更改为 y
的位。 y
也是如此。
掩码可以像这样创建
m = (2 << end) - (1 << start)
关于c++ - 按位替换两个数字中的位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48948962/