軌道
/
Java
Java
/
課程大綱
/
位元操作
位元

位元操作 在 Java

3 個練習

關於 位元操作

Java 提供了運算子,可用來操作整數型別(byte、short、int、long 或 char)的位元。

移位運算子

使用 << 將位元向左移位,用 >> 向右移位。

// Shift two places to the left
0b0000_1011 << 2;
// # => 0b0010_1100

// Shift two places to the right
0b0000_1011 >> 2;
// # => 0b0000_0010

>> 也稱為有號移位或算術移位運算子,因為它插入的位元與其正負號位元相同。 這是最高位位元,值為正時是 0,為負時是 1。 用 << 向左移位時,一律在右側插入 0。

// Shift 2 places to the right preserves the sign
// The binary value is two's complement of 0b0000_0110 (or 0x00000026), so the binary representation will be
// 1000_0000_0000_0000_0000_0000_0010_0110
int value = -0x7FFFFFDA;

// Shift two places to the right, preserving the sign bit
value >> 2;
// # => 1110_0000_0000_0000_0000_0000_0000_1001

向右移位時若要插入 0,請改用 >>>。 移位時插入 0 也稱為邏輯移位。

// Shift two places to the right, inserting 0s on the left
value >>> 2;
// # => 0010_0000_0000_0000_0000_0000_0000_1001

位元運算

位元 AND

位元 AND 運算子(&)接收兩個值,並對每個位元執行 AND 運算。 它會比較第一個值的每個位元,以及第二個值中相同位置的位元。 如果兩者都是 1,結果的位元就是 1。 否則,結果的位元為 0。

0b0110_0101 & 0b0011_1100;
// # => 0b0010_0100

位元 OR

位元 OR 運算子(|)接收兩個值,並對每個位元執行 OR 運算。 它會比較第一個值的每個位元,以及第二個值中相同位置的位元。 只要其中一個位元是 1,結果的位元就是 1。 否則為 0。

0b0110_0101 | 0b0011_1100;
// # => 0b0111_1101

位元 XOR

位元 XOR 運算子(^)會對兩個值執行位元 XOR 運算。 和位元 AND 與位元 OR 運算子一樣,它會比較第一個值的每個位元,以及第二個值中相同位置的位元。 如果只有其中一個是 1,結果的位元就是 1。 否則為 0。

0b0110_0101 ^ 0b0011_1100;
// # => 0b0101_1001

位元 NOT(~)

最後,位元 NOT 運算子(~)會翻轉每個位元。 和先前的運算子不同,這是一元運算子,只作用於一個值。

~0b0110_0101;
// # => 0b1001_1010
透過 GitHub 編輯 連結會在新視窗或分頁中開啟

學習 位元操作