將一個 32 位整數的二進制位完全反轉,例如 2 (0x00000002) 逆序後變為 0x40000000。
a << 1:左移一位,低位補 0b >> 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;
}
a 和 b 初始相等。b 尾部取出一位(b >>= 1 保證每次取最低位)。a 末尾(a <<= 1 保證第一個追加的位最終到達最高位)。Win7 32-bit, VS2010, C++ 編譯器。