给定的32位无符号整数的反向位。和之前的67题一样考二进制。
Input:00000010100101000001111010011100(43261596)
Output:00111001011110000010100101000000(964176192)
PS
>在某些语言(例如Java)中,没有无符号整数类型。 在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为该整数的内部二进制表示形式是有符号的还是无符号的。
>在Java中,编译器使用2的补码表示法来表示有符号整数。因此,在上面的示例2中,输入代表有符号整数-3,输出代表有符号整数-1073741825。
Method 1
class Solution:
def reverseBits(self, n: int) -> int:
return int("{:032d}".format(int(bin(n)[2:]))[::-1], 2)
bin(n)[2:]: 转为binary去除开头‘0b’
int()[::-1]: 转为整型并倒转
'{:032d}'.format:将32位转换位整型
int( ,2): 转换为2进制
由于电脑64位的,在pycharm里运行上面这个代码结果是不对的= =
Method 2
从右到左遍历n
class Solution:
def reverseBits(self, n: int) -> int:
res,power=0,31
while n:
res+=(n&1)<<power
n>>=1
power-=1
return res
class Solution:
def reverseBits(self, n: int) -> int:
res=0
bit=32
while bit:
res=(res<<1)|(n&1)
n>>=1
bit-=1
return res
res+=(n&1):都为1则为1
<<power:左移power位,末尾补零
n>>=1:相当于n=n>>1。右移一位并将结果付给原来的变量。