二進制運算基礎


一、二進制位運算


1. 按位與(&)

  位運算實質是將參與運算的數字轉換為二進制,而后逐位對應進行運算。

  按位與運算為:兩位全為1,結果為1,即1&1=1,1&0=0,0&1=0,0&0=0。

  例如51 & 5 -> 00110011 & 00000101 = 00000001 -> 51 & 5 = 1

  特殊用法:

  (1)與0相與可清零。

  (2)與1相與可保留原值,可從一個數中取某些位。例如需要取10101110中的低四位,10101110 & 00001111 = 00001110,即得到所需結果。

2. 按位或(|)

  兩位只要有一位為1,結果則為1,即1|1=1,1|0=1,0|1=1,0|0=0。

  特殊用法:

  (1)與0相或可保留原值。

  (2)與1相或可將對應位置1。例如,將X=10100000的低四位置1,使X | 00001111 = 10101111即可。

3. 異或運算(^)

  兩位為“異”,即一位為1一位為0,則結果為1,否則為0。即1 ^ 1=0,1 ^ 0=1,0 ^ 1=1,0 ^ 0=0。

  特殊用法:

  (1)使指定位翻轉:找一個數,對應X要翻轉的各位為1,其余為0,使其與X進行異或運算即可。例如,X=10101110,使低四位翻轉,X ^ 00001111 = 10100001。

  (2)與0相異或保留原值。例如X ^ 00000000 = 10101110。

  (3)交換兩變量的值。(比借助容器法、加減法效率高)原理:一個數對同一個數連續兩次進行異或運算,結果與這個數相等。

  因此,交換方法為:A = A ^ B,B = A ^ B,A = A ^ B。

4. 取反(~)

  將一個數按位取反,即~ 0 = 1,~ 1 = 0。

5. 左移(<<)

  將一個數左移x位,即左邊丟棄x位,右邊用0補x位。例:11100111 << 2 = 10011100。

拓展:
原碼:一個整數按照絕對值大小轉換為二進制即為原碼;
反碼:將二進制數按位取反,得到的即為反碼;
補碼:反碼加1即為補碼。
由於計算機底層硬件的限制,負數均使用補碼表示。

  若左移時舍棄的高位全為0,則每左移1位,相當於該數十進制時乘一次2。

  例:11(1011) << 2 = 44(11表示為1011時實際上不完整,若計算機中規定整型的大小為32bit,則11的完整二進制形式為00000000 00000000 0000000 00001011)

6. 右移(>>)

  將一個數右移若干位,右邊舍棄,正數左邊補0,負數左邊補1。每右移一位,相當於除以一次2。

  例:4 >> 2 = 1,-14 >> 2 = -4。

7. 無符號右移(>>>)

  將一個數右移若干位,左邊補0,右邊舍棄。

  例:-14 >>> 2 = (11111111 11111111 11111111 11110010) >>> 2 = (00111111 11111111 11111111 11111100) = 1073741820

二、Java內置的進制轉換

用途 方法
十進制轉成十六進制 Integer.toHexString(int i)
十進制轉成八進制 Integer.toOctalString(int i)
十進制轉成二進制 Integer.toBinaryString(int i)
十六進制轉成十進制 Integer.valueOf("FFFF", 16).toString()
八進制轉成十進制 Integer.valueOf("2234", 8).toString()
二進制轉成十進制 Integer.valueOf("0110", 2).toString()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM