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

C語言位反轉:32 位無符號整數二進制位順序顛倒

     編輯:關於C語言

C語言位反轉:32 位無符號整數二進制位順序顛倒

實現 reverse_bit(unsigned int value):將 32 位整數的二進制位從左到右完全反轉。如 25 (0x00000019) → 2550136832 (0x98000000)。

算法邏輯

第 i 位(從 0 起)移至第 31-i 位:

result |= ((value >> i) & 1) << (31 - i);

完整代碼(原文版本優化)

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

uint32_t reverse_bit(uint32_t value) {
    uint32_t result = 0;
    for (int i = 0; i < 32; i++) {
        // 提取第 i 位,放到第 31-i 位
        result |= ((value >> i) & 1u) << (31 - i);
    }
    return result;
}

// 更高效:查表法(4位一查,8次查表)
uint32_t reverse_bit_fast(uint32_t x) {
    static const uint8_t rev[16] = {
        0x0, 0x8, 0x4, 0xC, 0x2, 0xA, 0x6, 0xE,
        0x1, 0x9, 0x5, 0xD, 0x3, 0xB, 0x7, 0xF
    };
    uint32_t r = 0;
    for (int i = 0; i < 8; i++) {
        r = (r << 4) | rev[x & 0xF];
        x >>= 4;
    }
    return r;
}

int main() {
    uint32_t v = 25;  // 00000000 00000000 00000000 00011001
    uint32_t r = reverse_bit(v);
    printf("原值:%u (0x%08X)\n", v, v);
    printf("反轉:%u (0x%08X)\n", r, r);
    // 預期:2550136832 (0x98000000)
    return 0;
}

運行結果

原值:25 (0x00000019)
反轉:2550136832 (0x98000000)

二進制驗證

25        = 00000000 00000000 00000000 00011001
反轉後     = 10011000 00000000 00000000 00000000
           = 0x98000000 = 2550136832 ✓

性能對比

方法操作數適用場景
逐位循環32 次移位、與、或教學、非熱點路徑
查表法 (4位)8 次查表、移位、或高性能要求
查表法 (8位)4 次查表、移位、或極致優化(256 字節表)
編譯器內建__builtin_bitreverse32GCC/Clang 專用

應用場景

  • 網絡字節序轉換(大端↔小端)
  • FFT 位反序排列
  • 加密算法、哈希函數
  • 位板表示的棋盤鏡像
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved