1333. 颠倒二进制位

这是一个关于计算机编程的问题,主要涉及位操作。给定一个32位无符号整数,任务是将其二进制位反转。例如,输入00000010100101000001111010011100(43261596),输出00111001011110000010100101000000(964176192)。解决方案中包含一个名为`reverseBits`的方法,该方法通过递归地反转二进制位来实现这一功能。
摘要由CSDN通过智能技术生成

1333. 颠倒二进制位

 
颠倒给定的 32 位无符号整数的二进制位。

样例

样例 1:
输入: 00000010100101000001111010011100
输出: 00111001011110000010100101000000
解释:
输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,
因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。
样例 2:
输入:11111111111111111111111111111101
输出:10111111111111111111111111111111
解释:
输入的二进制串 11111111111111111111111111111101 表示无符号整数 4294967293,
因此返回 3221225471 其二进制表示形式为 10101111110010110010011101101001。

注意事项

  • 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
  • 在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。
 
 
public class Solution {
    /**
     * @param n: an integer
     * @return: return an integer
     */
    public long reverseBits(long n) {
       return reverseBits(n, 0);
}
 
 
// function overload
private long reverseBits(long n, int pos) {
    // 要反转[31, pos]这些围成的数字
    if (pos == 31) // 最后一位n
        return n;
        
    long last = n & 1; // & 运算是遇到1pass,遇到0则block成0,那n & 1相当于只把最后一位LSB取出来
    long ret = reverseBits(n >> 1, pos + 1); // 整体右移一位,相当于将最后一位LSB拿掉了(111 >> --> 011(11))
    // pos + 1是因为我们已经处理过一位了,接下来只要处理到倒数第二位就好了
    ret += last << (31 - pos); // last左移这么多,这两行操作相当于把最后一位移到第一位去
    return ret;
    
    /*
    11111111111111111111111111111101
    last = 1
    右移一位后为1111111111111111111111111111110
    ret = 0111111111111111111111111111111
    last左移后为10000000000000000000000000000000
    return = ret + last = 10111111111111111111111111111111 (此时的MSB就是第31-pos位)
    */
}
}
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时代我西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值