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

C# 位運算封裝:MAKEPARAM 將兩 16 位值合成為 32 位整數

     編輯:程式設計疑難解答

代碼

private static int MAKEPARAM(int l, int h) {
    return ((l & 0xffff) | (h << 0x10));
}

參數:滑鼠 X、Y 坐標(各 16 位)。

逐步解析

  1. l & 0xffff:取 `l` 低 16 位,高 16 位清零。
  2. h << 0x10:`h` 左移 16 位(0x10 = 16),移至高 16 位,低 16 位補 0。
  3. |:按位或,合併為 32 位整數:
    `高 16 位 = h 低 16 位`,`低 16 位 = l 低 16 位`。

應用場景

  • Windows API `lParam` 封裝:`LOWORD(lParam)` 取 X,`HIWORD(lParam)` 取 Y。
  • 將兩個 `short`/`ushort` 打包傳遞,減少參數數量。

逆向提取

int x = param & 0xFFFF;        // 低 16 位
int y = (param >> 16) & 0xFFFF; // 高 16 位

注意

  • 若 `l`、`h` 可能超出 16 位,`& 0xffff` 確保截斷。
  • C# 中 `int` 為有號 32 位,位運算按補碼進行,邏輯無影響。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved