Python中的位反转

时间:2015-02-01 02:37:40

标签: python

给定一个数字,例如2,假设它以32位表示,我将如何反转这些位?

以1为例,因为无符号32位是00000000000000000000000000000001并且正在翻转我们得到的是11111111111111111111111111111110,而这又是4294967294

我尝试过以下但是没有用。

numElements = int(raw_input())
for i in range(0,numElements):
    x = int(raw_input())
    print int(bin(x)[:1:-1], 2)

1 个答案:

答案 0 :(得分:3)

对所有32位设置为1的数字使用XOR:

mask = 2 ** 32 - 1
x = int(raw_input())
print format(x ^ mask, '032b')

^bitwise XOR operator

我使用format() function生成0填充的32位二进制表示,它比bin()灵活得多。

演示:

>>> mask = 2 ** 32 - 1
>>> format(mask, '032b')
'11111111111111111111111111111111'
>>> x = 1
>>> x ^ mask
4294967294
>>> format(x ^ mask, '032b')
'11111111111111111111111111111110'