一、题目要求

二、题目背景
此题依旧属于位运算范畴
知识点1:有符号和无符号二进制是怎样表现的?
对于有符号数,最高位为1说明是个负数
知识点2:进制之间的相互转换
(1)十进制转十六进制
hex(n)

(2)十六进制转十进制
int(str,16),其中str是16进制字符串

(3)十进制转二进制
bin(n) ,其中n就是十进制整数

(4)二进制转十进制
int(str,2) 其中str是二进制的字符串表现形式

三、解题思路
3.1 思路1
(1)代码
首先想到的就是将这个二进制字符串倒叙显示就可以了即S[::-1]
class Solution: # @param n, an integer # @return an integer def reverseBits(self, n): return int(bin(n)[2:][::-1],2)
(2)测试结果
测试运行结果错误,结果见下图,在进行n转二进制时高位0被自动忽略,导致后续转换失败
bin(43261596)
'0b10100101000001111010011100'

(3)优化
设置一个格式,将整数转成二进制时高位补0 b='{:032b}'.format(n), '{:32b}'.format(n)得到的结果就是高位不补0,运行结果如下

3.2 思路2
还可以通过移位的操作,执行用时比上面的更快

class Solution:
# @param n, an integer
# @return an integer
def reverseBits(self, n):
res=0
for i in range(32):
res=res<<1
res+=n&1
n= n>>1
return res
四、进阶
如果要多次调用这个函数,又该如何优化算法?