首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言二進位位元翻轉:32位無符號整數左右鏡像反轉

     編輯:關於C

題目

將 32 位無符號整數二進位模式完全反轉 (bit 0 ↔ bit 31, bit 1 ↔ bit 30...)。

例:25 (0x00000019) → 0x98000000 (2550136832)。

方法一:逐位提取 + 移位組裝 (教學清晰)

#include 
uint32_t reverse_bits(uint32_t x) {
    uint32_t rev = 0;
    for (int i = 0; i < 32; i++) {
        rev = (rev << 1) | (x & 1); // rev 左移騰位,接入 x 最低位
        x >>= 1;
    }
    return rev;
}

方法二:分治法 (並行反轉,無迴圈)

uint32_t reverse_bits_fast(uint32_t x) {
    x = ((x >> 1) & 0x55555555) | ((x & 0x55555555) << 1); // 交換相鄰 1 位
    x = ((x >> 2) & 0x33333333) | ((x & 0x33333333) << 2); // 交換相鄰 2 位
    x = ((x >> 4) & 0x0F0F0F0F) | ((x & 0x0F0F0F0F) << 4); // 交換相鄰 4 位
    x = ((x >> 8) & 0x00FF00FF) | ((x & 0x00FF00FF) << 8); // 交換相鄰 8 位
    x = (x >> 16) | (x << 16);                              // 交換高低 16 位
    return x;
}

方法三:查表法 (8bit 查表 4 次)

static const uint8_t rev8[256] = { /* 預計算 0~255 反轉 */ };
uint32_t reverse_bits_lut(uint32_t x) {
    return (rev8[x & 0xFF] << 24) |
           (rev8[(x>>8) & 0xFF] << 16) |
           (rev8[(x>>16) & 0xFF] << 8) |
           (rev8[x>>24]);
}

測試

int main() {
    uint32_t v = 25;
    printf("%u\n", reverse_bits(v)); // 2550136832
    return 0;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved