#include <stdio.h>
int main() {
unsigned int m = 0b11001100101010101100110010101010; // 示例數據
unsigned char n[4];
// 位元調換函數
unsigned char swap_bits(unsigned char byte) {
unsigned char swapped = 0;
swapped |= (byte & 0x80) >> 1; // b7 -> b6
swapped |= (byte & 0x40) << 1; // b6 -> b7
swapped |= (byte & 0x20) >> 1; // b5 -> b4
swapped |= (byte & 0x10) << 1; // b4 -> b5
swapped |= (byte & 0x08) >> 1; // b3 -> b2
swapped |= (byte & 0x04) << 1; // b2 -> b3
swapped |= (byte & 0x02) >> 1; // b1 -> b0
swapped |= (byte & 0x01) << 1; // b0 -> b1
return swapped;
}
// 提取 m 的各個位元組並調換位元
n[0] = swap_bits((m >> 24) & 0xFF);
n[1] = swap_bits((m >> 16) & 0xFF);
n[2] = swap_bits((m >> 8) & 0xFF);
n[3] = swap_bits((m >> 0) & 0xFF);
// 輸出結果
for(int i = 0; i < 4; i++) {
printf("n[%d]: %02X\n", i, n[i]);
}
return 0;
}
解釋
位元調換函數 swap_bits:
該函數接收一個8位元的位元組,並將其內部的兩兩位元進行交換。具體來說,它將 b7 和 b6 交換,b5 和 b4 交換,依此類推。
使用位元運算符 & 和 | 來提取和設定每一對位元的位置。
提取和處理 m 的位元組:
變數 m 的每個位元組是通過位移操作提取的。例如,(m >> 24) & 0xFF 提取最高的8位元。
提取後,每個位元組都通過 swap_bits 函數進行兩兩位元的交換。
輸出結果:
最後,將結果存入陣列 n 中,並通過循環輸出每個元素的值。
這樣的實現方法遵循了題目中禁止使用算術運算符(+, -, *, /, %),僅使用位移和位元運算符來達成目標。