將 16 位元無號整數的位元順序完全反轉:bit 0 ↔ bit 15、bit 1 ↔ bit 14、…、bit 7 ↔ bit 8。
例:0xB35E (1011 0011 0101 1110) → 0x7ACD (0111 1010 1100 1101)
只需處理前 8 位(i = 0..7),每輪交換 bit i 與 bit 15-i:
bit i:(data >> i) & 115-i:((data >> i) & 1) << (15 - i)bit 15-i 移至 i| 累加至結果uint16_t reverse_bits16(uint16_t data)
{
uint16_t dest = 0;
for (int i = 0; i < 8; ++i) {
uint16_t low_bit = (data >> i) & 1;
uint16_t high_bit = (data >> (15 - i)) & 1;
dest |= (low_bit << (15 - i)) | (high_bit << i);
}
return dest;
}
| i | low_bit<<(15-i) | high_bit< | 合併 | dest 累積 |
|---|---|---|---|---|
| 0 | 0x0000 | 0x0001 | 0x0001 | 0x0001 |
| 1 | 0x4000 | 0x0000 | 0x4000 | 0x4001 |
| 2 | 0x2000 | 0x0004 | 0x2004 | 0x6005 |
| 3 | 0x1000 | 0x0008 | 0x1008 | 0x700D |
| 4 | 0x0800 | 0x0000 | 0x0800 | 0x780D |
| 5 | 0x0000 | 0x0000 | 0x0000 | 0x780D |
| 6 | 0x0200 | 0x0040 | 0x0240 | 0x7A4D |
| 7 | 0x0000 | 0x0080 | 0x0080 | 0x7ACD |
最終 dest = 0x7ACD,與預期相符。
0x5555、0x3333、0x0F0F、0x00FF 遮罩),無分支、指令級平行。__builtin_bswap16、MSVC _byteswap_ushort。