一、题目要求
二、题目背景
此题依旧属于位运算范畴
知识点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
四、进阶
如果要多次调用这个函数,又该如何优化算法?