190. Reverse Bits反转位Python

给定的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。右移一位并将结果付给原来的变量。

 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值