📜  翻转一个数字的位 (1)

📅  最后修改于: 2023-12-03 14:57:04.937000             🧑  作者: Mango

翻转一个数字的位

在计算机科学中,翻转一个数字的位可以用于许多实际问题。这个问题中,我们的目标是翻转一个二进制数字中的所有位,即将0变为1,将1变为0。

思路

翻转一个数字的位可以通过位运算实现。通过异或运算相同数值异或得到的结果为0,0异或任何数值都是其本身。因此,我们可以使用异或运算的性质,对每一位分别进行异或操作,实现翻转。

代码实现
Python
def reverse_bits(n: int) -> int:
    result = 0
    for i in range(32):
        result = (result << 1) | (n & 1)
        n >>= 1
    return result
Java
public int reverseBits(int n) {
    int result = 0;
    for (int i = 0; i < 32; i++) {
        result = (result << 1) | (n & 1);
        n >>= 1;
    }
    return result;
}
C++
uint32_t reverseBits(uint32_t n) {
    uint32_t result = 0;
    for (int i = 0; i < 32; i++) {
        result = (result << 1) | (n & 1);
        n >>= 1;
    }
    return result;
}
时间复杂度

对于给定的n,循环执行将32位取反。因此时间复杂度为O(1)。

结论

翻转一个数字的位可以通过位运算实现,这将成为计算机科学中许多实际问题的基础。