c++ - 按位替换两个数字中的位

标签 c++ bit-manipulation bitwise-operators solidity

我对如何使用按位运算将位间隔从数字 X 交换到数字 Y 很感兴趣。

例如我有数字:

X = 00000000 Y = 00111111

位置开始,位置结束

我想用相同位置的 Y 中的位替换 X 中的 [positionStart, positionEnd] 位。

最佳答案

如果您有一个掩码 m 指示您要移动或交换的位,您可以像这样移动它们:

x = x ^ ((x ^ y) & m)

或者像这样交换它们:

t = (x ^ y) & m
x ^= t
y ^= t

这可以解释为取 xy 之间的位差,仅在设置了 m 的地方。然后对 x 进行异或运算,翻转 x 中的位,其中 xy 不同(而 m 已设置),因此它将 x 的那些位更改为 y 的位。 y 也是如此。


掩码可以像这样创建

m = (2 << end) - (1 << start)

关于c++ - 按位替换两个数字中的位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48948962/

相关文章:

c++ - 可以查询 OpenAL 设备它喜欢的频率和格式吗?

C++字符串库错误: string subscript out of range

c - C:位字段和按位运算符

c++ - && 和 & 与 bool(s) 之间有什么区别吗?

c++ - 特征:通过引用访问矩阵的列

c++ - 静态初始化器在库中时被优化掉

javascript - 为什么在 JavaScript 表达式中 255 << 24 是一个负数?

c# - 检查字节是否设置了多于一位

按位与和逻辑或的 C++ 运算符优先级

java - Java 左移 0