题目描述
颠倒二进制位
给定一个32位无符号整数 n,你需要将这个数翻转其二进制位。例如,输入 43261596(其二进制表示为 00000010100101000001111010011100),则返回 964176192(其二进制表示为 00111001011110000010100101000000)。
提示:
- 请注意,在某些语言(如 Java)中,整数没有无符号整数类型。但是,在本题中,我们将输入的整数视为无符号的 32 位整数,并假设你的函数可以返回相同类型的值。
 - 你的函数应该返回翻转后的整数,而不是字符串。
 
PHP 示例代码
function reverseBits($n) {
    $result = 0;
    for ($i = 0; $i < 32; $i++) {
        $result = ($result << 1) | ($n & 1);
        $n >>= 1;
    }
    return $result;
}
// 示例
$n = 43261596;
echo reverseBits($n);  // 输出 964176192
Python 示例代码
def reverseBits(n: int) -> int:
    result = 0
    for _ in range(32):
        result = (result << 1) | (n & 1)
        n >>= 1
    return result
# 示例
n = 43261596
print(reverseBits(n))  # 输出 964176192
JavaScript 示例代码
function reverseBits(n) {
    let result = 0;
    for (let i = 0; i < 32; i++) {
        result = (result << 1) | (n & 1);
        n >>= 1;
    }
    return result >>> 0; // 使用无符号右移来确保结果是非负的
}
// 示例
let n = 43261596;
console.log(reverseBits(n));  // 输出 964176192
在解答这道题目时,我们使用了位运算来逐位翻转给定的整数。具体来说,我们通过循环32次(因为题目中给定的是32位无符号整数),在每次循环中,我们先将result左移一位(相当于在其二进制表示的末尾添加一个0),然后将n的最低位(通过n & 1得到)添加到result的最低位上,之后将n右移一位。这样,通过32次循环,我们就能得到n的二进制位翻转后的结果。
在JavaScript的示例中,我使用了>>>操作符来进行无符号右移,这是为了确保最终的结果是一个非负的整数,尽管在JavaScript中所有的数字都是以64位浮点数形式存储的,但这个操作符可以帮助我们模拟无符号整数的行为。不过,在这个特定的例子中,由于我们是在处理32位整数,并且始终在进行位运算,所以最终的结果仍然可以看作是一个32位的无符号整数。