0001 1001
另如 ASCII 編碼 (encoding) 中的字母 f 為
0110 0110
所謂的位元運算 (bit operation) ,就是逐位元進行比較,例如以上兩項編碼做邏輯或的位元運算
0001 1001 or 0110 0110
結果會是
0111 1111
Java 的位元運算子 (bitwise operator) ,如下列表
運算子 | 功能 | 範例 |
---|---|---|
~ | 取補數 | ~a |
<< | 保留正負號向左位移 | a << b |
>> | 保留正負號向右位移 | a >> b |
>>> | 無正負號向右位移 | a >>> b |
& | 位元且 | a & b |
^ | 位元互斥或 | a ^ b |
| | 位元包含或 | a | b |
以下例子示範位元運算子的使用
class BitLogicDemo { public static void main(String[] args) { int a = 5; int b = 3; System.out.println(~a); System.out.println(b << 2); System.out.println(b >> 2); System.out.println(b >>> 2); System.out.println(a & b); System.out.println(a | b); System.out.println(a ^ b); } } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:BitLogicDemo.java 功能:示範位元邏輯運算子的使用 作者:張凱慶 時間:西元 2010 年 10 月 */
編譯後執行,結果如下
由於 5 用二進位 32 位元的表示為
0000 0000 0000 0000 0000 0000 0000 0101
取其補數變為
1111 1111 1111 1111 1111 1111 1111 1010
換算成十進位為 -6 。類似的 3 用二進位 32 位元的表示為
0000 0000 0000 0000 0000 0000 0000 0011
向左位移 2 個位元,變為
0000 0000 0000 0000 0000 0000 0000 1100
空出的位元補上 0 ,就變成十進位數字的 12 ,向左位移 2 個位元,就是原數乘上 22 ,也就是說乘以 4 。由於向右位移直接把位元移開,原空出的位元補上 0 ,就變成
0000 0000 0000 0000 0000 0000 0000 0000
所以兩個運算結果都是 0 。且、或、互斥或的運算,以二進位表示如下
101 and 011 = 001
101 or 011 = 111
101 xor 011 = 110
101 or 011 = 111
101 xor 011 = 110
因此 3 且 5 ,結果會是 1 ; 3 或 5 ,結果為 7 ; 3 互斥或 5 ,結果則是 6 。
中英文術語對照 | |
---|---|
資料 | data |
位元 | bit |
整數 | integer |
編碼 | encoding |
位元運算 | bit operation |
位元運算子 | bitwise operator |
參考資料
http://download.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
http://java.sun.com/docs/books/jls/third_edition/html/expressions.html
http://download.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
http://java.sun.com/docs/books/jls/third_edition/html/expressions.html
沒有留言:
張貼留言