位元運算子

了解位元運算子(& | ^)與位移運算子(<< >> >>>)的基本使用。

位元運算子

我們知道資料在記憶體中都是以0/1的方式儲存,如果想直接對這些位元做運算,Java提供了一些位元運算子供設計師使用。

Operator運算子

描述

範例 (令a, b為數值)

~

位元補數(complement)運算

~a

&

位元和(and)運算

a & b

|

位元或(or)運算

a | b

^

位元互斥或(exclusive or)運算

a ^ b

補數 complement (~):

補數的意思就是1變0,0變1,反向的感覺。

範例程式:

int a = 45;
System.out.println(a);
a = ~a;
System.out.println(a);

執行結果:

45    // 00000000000000000000000000101101
-46   // 11111111111111111111111111010010

和 and (&):

和運算,是二元運算,只有兩個都為1,結果才是1。

範例程式:

執行結果:

AND真值表:

&

1

0

1

1

0

0

0

0

或 or (|):

或運算,是二元運算,只要有一個1,結果就是1。

範例程式:

執行結果:

OR 真值表:

|

1

0

1

1

1

0

1

0

互斥或 exclusive or (^):

互斥或,英文縮寫常稱『XOR』,是二元運算子,位元不同為1。

程式範例:

執行結果;

XOR 真值表:

^

1

0

1

0

1

0

1

0

位移運算子 Bit Shift Operators

位移運算子的目的是向左或向右移動目標運算元的每個位元。

Operator運算子

描述

範例 (令a, b為數值)

<<

保留正負號的左移運算

a << b (將a逐位元左移b個單位)

>>

保留正負號的右移運算

a >> b (將a逐位元右移b個單位)

>>>

右移運算

a >>> b

範例程式:

執行結果:

範例程式2 (負號測試):

執行結果:

(無號右移>>>,不會理會當前的符號位元,直接右移補0上去)

※利用位元位移運算子,可以達到最快的 *2 或 /2 運算。

嘛,因為根本沒做到數學運算,而乘法跟除法在計算上是很廢時的。

範例程式:

執行結果:

Last updated

Was this helpful?