Sex*_*ast 2 python bit-manipulation
问题是如何从数字开始反转一个数字的交替位LSB.目前我正在做的是先做一个
count = -1
while n:
n >>= 1
count += 1
Run Code Online (Sandbox Code Playgroud)
首先找到最左边的设置位的位置,然后运行一个循环来反转每个备用位:
i = 0
while i <= count:
num ^= 1<<i
i += 2
Run Code Online (Sandbox Code Playgroud)
有没有一个快速的黑客解决方案,而不是这个相当无聊的循环解决方案?当然,解决方案不能对整数的大小做任何假设.
我认为这可能有效:
具有交替掩码的按位异或10101010...10应该每隔一位反转.
如果要在"0011"中反转交替位,下表显示结果:
i | m | i XOR m
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
Run Code Online (Sandbox Code Playgroud)
在python XOR中实现了i ^ m.当然你也必须确定你的面具的字面值,这取决于你的i数字的大小.