如何对位域进行插入操作?
How to perform an insertion operation on a bit field?
如何对位域进行插入操作?
如果我有 1111(整数 15),如何在 "index" 1 处插入 0 以获得 11101?
我正在写 Swift 4 并且我使用 Int 作为数据类型。
在这个 Whosebug post 中,他们展示了如何在位域上执行删除操作(它在 java 中,但这与语言无关):Removing bit at specific index
P.S。这是高性能代码。
您需要提取插入点下方的位和上方的位。您需要将上面的位左移,然后重新组合这些部分。因此:
var x: UInt64 = 0b1111
let index: UInt64 = 1
let lowMask: UInt64 = (1 << index) - 1
let highMask: UInt64 = ~lowMask
x = ((x & highMask) << 1) | (x & lowMask)
print(String(x, radix: 2))
// Output: 11101
如何对位域进行插入操作?
如果我有 1111(整数 15),如何在 "index" 1 处插入 0 以获得 11101?
我正在写 Swift 4 并且我使用 Int 作为数据类型。
在这个 Whosebug post 中,他们展示了如何在位域上执行删除操作(它在 java 中,但这与语言无关):Removing bit at specific index
P.S。这是高性能代码。
您需要提取插入点下方的位和上方的位。您需要将上面的位左移,然后重新组合这些部分。因此:
var x: UInt64 = 0b1111
let index: UInt64 = 1
let lowMask: UInt64 = (1 << index) - 1
let highMask: UInt64 = ~lowMask
x = ((x & highMask) << 1) | (x & lowMask)
print(String(x, radix: 2))
// Output: 11101