翻转一个整数的二进制数


/*
*	翻转一个整数的二进制数
*/

#include <stdint.h>
#include <stdio.h>

uint32_t reverse_bits(uint32_t n) {
    // 交换相邻位
    n = ((n & 0xAAAAAAAA) >> 1) | ((n & 0x55555555) << 1);
    // 交换每2位
    n = ((n & 0xCCCCCCCC) >> 2) | ((n & 0x33333333) << 2);
    // 交换每4位
    n = ((n & 0xF0F0F0F0) >> 4) | ((n & 0x0F0F0F0F) << 4);
    // 交换每8位
    n = ((n & 0xFF00FF00) >> 8) | ((n & 0x00FF00FF) << 8);
    // 交换每16位
    n = (n >> 16) | (n << 16);
    return n;
}

int main() {
    uint32_t num = 0x1; // 示例整数
    uint32_t reversed_num = reverse_bits(num);

    printf("Original: %08X\n", num);		
    printf("Reversed: %08X\n", reversed_num);

    return 0;
}

结果
image

posted @ 2024-07-04 20:38  歪币八卜  阅读(39)  评论(0)    收藏  举报