綜述
0xff 是一個以十六進制數字系統(基數為 16)表示的數字。它由兩個十六進制的 F 數字組成。眾所周知,十六進制中的 F 相當於二進制數字系統中的 1111。所以,二進制的 0xff 是 11111111。
我們將了解如何使用0xff值。此外,我們將了解如何使用多種數據類型表示它,以及如何與&操作符一起使用它。最后,我們將回顧使用它的一些好處。
用不同的數據類型表示0xff
Java 允許我們通過使用 0x 前綴和整數文字來定義解釋為十六進制(基數為 16)的數字。0xff 相當於無符號十進制的 255、有符號十進制的 -127 和二進制的 11111111。
因此,如果我們定義一個值為 0xff 的 int 變量,由於 Java 使用 32 位表示整數,因此 0xff 的值為 255:
int x = 0xff;
assertEquals(255, x);
但是,如果我們定義一個值為 0xff 的字節變量,因為 Java 使用 8 位表示一個字節,並且因為字節是有符號數據類型,所以 0xff 的值為 -1:
byte y = (byte) 0xff;
assertEquals(-1, y);
如我們所見,當我們定義一個值為 0xff 的字節變量時,我們需要將其向下轉換為字節,因為字節數據類型的范圍是從 -128 到 127。
& 0xff 操作的常見用法
& 運算符執行按位與運算。如果兩個操作數的相應位為 1,則按位 AND 的輸出為 1。另一方面,如果操作數的任一位為 0,則相應位的結果被計算為 0。
由於 0xff 在最后 8 位中有 8 個 1,因此它為按位 AND 運算的標識元素。因此,如果我們應用 x & 0xff 操作,它將為我們提供 x 的最低 8 位,如果數字 x 小於 255,結果與x是相同的,否則,它將是 x 的最低 8 位。
通常,& 0xff 操作為我們提供了一種從數字中提取最低 8 位的簡單方法。實際上可以使用它來提取我們需要的任何8位,因為我們可以向右移動我們希望成為最低位的任何8位,然后,我們可以通過應用& 0xff操作來提取它們。
使用 & 0xff 提取 RGBA 顏色坐標
假設我們有一個整數 x,以 32 位存儲,表示 RGBA 系統中的一種顏色,這意味着它的每個參數(R、G、B 和 A)有 8 位:
- R = 16 (00010000 in binary)
- G = 57 (00111001 in binary)
- B = 168 (10101000 in binary)
- A = 7 (00000111 in binary)
因此,二進制中的 x 將表示為 00010000 00111001 10101000 00000111——相當於十進制的 272214023。現在,我們有十進制的 x 值,我們想要提取每個參數的值。
正如我們所知,>> 操作將位右移。因此,當我們執行 (10000000 00000000 >> 8) 時,它返回 10000000。因此,我們可以提取每個參數的值:
int rgba = 272214023;
int r = rgba >> 24 & 0xff;
assertEquals(16, r);
int g = rgba >> 16 & 0xff;
assertEquals(57, g);
int b = rgba >> 8 & 0xff;
assertEquals(168, b);
int a = rgba & 0xff;
assertEquals(7, a);
結論
我們討論了 & 0xff 操作如何有效地以僅保留最后 8 位中的值並忽略其余位的方式划分變量。正如我們所見,當我們將變量右移並需要提取移位后的位時,此操作特別有用。