學了這麼久的Java,你對進制轉換還記得多少?

本文起源於小雷學習hashmap原理時看到hashmap擴容機制發現本身對二進制運算忘得差很少了,可能大部分人和我差很少,日常工做中用不到的技術,你學習了是不錯,可是忘記的會很快,這就須要咱們常常性的複習咱們學習過的技術(這裏手動狗頭棒砸向本身)bash

一、十進制轉二進制

將十進制數除以2直至商爲0或者1,將每一步的餘數記錄下來,而後將餘數反過來就是相應的二進制了網絡

例子:十進制8轉二進制學習

第一次8除以2得4餘0,第二次4除以2得2餘0,第三次2除以2得1餘0,最後餘1,獲得的餘數依次爲0001。ui

反過來就是1000,計算機內部表示數的長度是固定的,好比8位,16位,32位,位數不足在高位補齊(爲何在高位,由於在高位補0對這個數沒影響)spa

Java代碼實現:code

public class mapHashCodeTest {
     public static void main(String[] args) {
         String str = toBinary(8);
         System.out.println(str);
     }
     static String toBinary(int num) {
         String str = "";
         while (num != 0) {
             str = num % 2 + str;
             num = num / 2;
         }
         return str;
     }

}
複製代碼

二、二進制轉十進制

二進制1000 ,轉十進制的話,只要拿對應位上的0、1數字乘以2的冪(這裏的冪次從個位開始算,個位是零,依次日後推)cdn

8 = 0 * 2(0次冪) + 0 * 2(1次冪) + 0 * 2(2次冪) + 0 * 2(3次冪)blog

能夠直接調用Integer.parseInt()實現,例如:ip

System.out.println(Integer.parseInt("1000",2));
複製代碼

結果爲:8string

三、位與運算(&)

若是是二進制數則能夠直接進行運算,若是是十進制或者十六進制則須要轉換爲二進制進行運算。運算規則爲:從個位開始,兩個數都爲1則爲1,不然爲0

例如:

8的二進制爲1000, 9的二進制爲1001,位與運算後爲1000

代碼實現:

int a = 8;
int b = 9;
System.out.println(a&b); // 結果爲8
複製代碼

與運算在不少場景中都會用到,例如ip地址和子網掩碼進行與運算獲得網絡地址。

四、位或運算(|)

兩個數都轉爲二進制數,運算規則:從個位數開始,兩個數只要有一個爲1則爲1,不然爲0。

例如:

8的二進制爲1000, 9的二進制爲1001,位或運算後爲1001

代碼實現:

int a = 8;
int b = 9;
System.out.println(a|b); // 結果爲9
複製代碼

五、位異或運算(^)

運算規則是:兩個數轉爲二進制,而後從高位開始比較,若是相同則爲0,不相同則爲1。

例如:

8的二進制爲1000, 9的二進制爲1001,位異或運算後爲0001

代碼實現:

int a = 8;
int b = 9;
System.out.println(a^b); // 結果爲1
複製代碼

接下來比較繞,請仔細看

六、位非運算符(~)

將數轉爲二進制數,運算規則:從個位數開始,位爲1則爲0,位爲0則爲1。

Java中全部數據的表示方法都是以補碼的形式表示,若是沒有特別說明,Java中的數據類型默認是int, int數據類型的長度是8位,一位是4字節,就是32字節,32bit。

例如:

8的二進制爲1000,

補碼後爲:0000 0000 0000 0000 0000 0000 0000 1000

取反爲:1111 1111 1111 1111 1111 1111 1111 0111

由於高位是1,因此原碼爲負數,負數的補碼是其絕對值的原碼取反,末尾再加1

所以咱們可將這個二進制數的補碼進行還原,

末尾減1得反碼:1111 1111 1111 1111 1111 1111 1111 0110

將反碼取反得原碼:0000 0000 0000 0000 0000 0000 0000 1001

去除補碼位得1001,因此8位非獲得-9

代碼實現:

int a = 8;
System.out.println(~a); //結果爲-9
複製代碼

若是你喜歡本文,

請掃描二維碼關注獲取更多文章

相關文章
相關標籤/搜索