將 a 左移 4 位騰出低 4 位,再與 b 按位或:
uint8_t a = 0b1001; // 9
uint8_t b = 0b1100; // 12
uint8_t combined = (a << 4) | b; // 0b10011100 = 156
數學上等價,但 位運算語意更明確,編譯器優化後機器碼相同。若 a、b 超過 4 位需先掩碼:
combined = ((a & 0xF) << 4) | (b & 0xF);
template
T concatBits(T high, T low, int lowBits) {
return (high << lowBits) | (low & ((1 << lowBits) - 1));
}
// 用法:concatBits(a, b, 4);