给定一个数字,例如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)
答案 0 :(得分:3)
对所有32位设置为1的数字使用XOR:
mask = 2 ** 32 - 1
x = int(raw_input())
print format(x ^ mask, '032b')
我使用format()
function生成0填充的32位二进制表示,它比bin()
灵活得多。
演示:
>>> mask = 2 ** 32 - 1
>>> format(mask, '032b')
'11111111111111111111111111111111'
>>> x = 1
>>> x ^ mask
4294967294
>>> format(x ^ mask, '032b')
'11111111111111111111111111111110'