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

Java 中按位或運算(|)的巧妙應用:Buffer 邊界檢查優化技巧

     編輯:Java 綜合教學

按位或運算在邊界檢查中的應用

在 java.nio.Buffer 源碼中發現一個精妙的邊界檢查實現:

static void checkBounds(int off, int len, int size) {
    if ((off | len | (off + len) | (size - (off + len))) < 0)
        throw new IndexOutOfBoundsException();
}

常規寫法會使用多條件邏輯或:

if (off < 0 || len < 0 || (off + len) < 0 || (size - (off + len)) < 0)

原理解析

  • 按位或 |:任一操作數對應位為 1 則結果位為 1
  • 有符號整數最高位為符號位:負數最高位為 1,非負數最高位為 0
  • 若四個表達式中任一為負數,其最高位為 1,經 | 運算後結果最高位必為 1,即結果 < 0

因此 (off | len | (off+len) | (size-(off+len))) < 0 等價於四個條件任一為真。

優勢

  1. 減少分支預測失敗,提升性能
  2. 代碼緊湊,單條指令完成多條件檢查
  3. 展示位運算在系統級編程中的威力

注意:需確保運算不溢出(此處參數為 int,邏輯安全)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved