📜  编写高效的C程序以反转数字的位(1)

📅  最后修改于: 2023-12-03 15:27:37.720000             🧑  作者: Mango

编写高效的C程序以反转数字的位

在编程中,经常需要对数字进行操作,例如反转数字的位,即将其高位与低位颠倒。本文将介绍如何编写一个高效的C程序以反转数字的位。

方法一:逐位反转数字

这种方法是最简单但不一定最高效的方法。它的基本思想是从原始数字的最低位开始,将每个位上的数字依次反转到新数字的对应位上。

#include <stdio.h>

int reverse(int n) {
    int r = 0;
    while (n != 0) {
        r = r * 10 + n % 10;
        n /= 10;
    }
    return r;
}

int main() {
    int n = 12345;
    int r = reverse(n);
    printf("%d\n", r);  // 输出54321
    return 0;
}
方法二:使用位运算符

这种方法是更高效的方法,它使用位运算符来实现数字反转。它的基本思想是从原始数字的最低位开始,将每个位上的数字依次反转到新数字的对应位上。这个方法同样可以用于反转小数位。

#include <stdio.h>

unsigned int reverse(unsigned int n) {
    unsigned int r = 0;
    int i;
    for (i = 0; i < 32 && n; ++i) {
        r |= (n & 1) << (31 - i);
        n >>= 1;
    }
    return r;
}

int main() {
    unsigned int n = 0xF0000000;
    unsigned int r = reverse(n);
    printf("%x\n", r);  // 输出0000000F
    return 0;
}
总结

在本文中,我们介绍了两种不同的方法来反转数字的位。第一种方法是逐位反转数字,它简单但不一定高效。第二种方法是使用位运算符来反转数字,它相对于第一种方法更高效。