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

C語言實現整數二進制位逆序算法

     編輯:關於C語言

問題背景

將一個 32 位整數的二進制位完全反轉,例如 2 (0x00000002) 逆序後變為 0x40000000。

核心位運算知識

  • a << 1:左移一位,低位補 0
  • b >> 1:右移一位,高位補 0(無符號數)
  • b & 1:取最低位值(0 或 1)
  • a &= ~1:將最低位清零
  • a |= 1:將最低位置 1

完整實現代碼

#include <stdio.h>

int main(void) {
    int i = 32, a = 2;          // 32位環境,a = 2 (二進制 ...0010)
    int b = a;                  // 備份原值

    while (i--) {
        a = a << 1;             // a 左移,騰出最低位
        a &= ~1;                // 確保最低位為 0

        if (b & 1) {            // 取 b 當前最低位
            a |= 1;             // 若為 1,將 a 最低位置 1
        }
        b = b >> 1;             // b 右移,準備下一位
    }

    printf("%d\n", a);          // 輸出逆序後的值
    return 0;
}

算法思想

  1. 令 a 和 b 初始相等。
  2. 循環 32 次,每次從 b 尾部取出一位(b >>= 1 保證每次取最低位)。
  3. 將取出的位追加到 a 末尾(a <<= 1 保證第一個追加的位最終到達最高位)。

運行環境

Win7 32-bit, VS2010, C++ 編譯器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved