首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 位運算合併兩個 4-bit 值為 8-bit:a<<4 | b

     編輯:程式設計綜合問答

核心邏輯

將 a 左移 4 位騰出低 4 位,再與 b 按位或:

uint8_t a = 0b1001; // 9
uint8_t b = 0b1100; // 12
uint8_t combined = (a << 4) | b; // 0b10011100 = 156

為何不是 a*16+b?

數學上等價,但 位運算語意更明確,編譯器優化後機器碼相同。若 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);

應用場景

  • 網絡協議頭部字段打包(如 TCP Flags + Window Size)。
  • 像素格式轉換(RGB565 = R5<<11 | G6<<5 | B5)。
  • 嵌入式寄存器讀寫合成命令字。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved