二進制、八進制、十六進制轉換及原碼、反碼、補碼轉換

二進制、八進制、十六進制轉換及原碼、反碼、補碼轉換

二進制

  • 如果說十進制是人類的計算度量單位,那麼二進制就是機器識別的計算度量單位
    ,十進制逢十進一,例如9+1=10,到10進位,各位數爲0,十位數則加1爲1,寫出來則爲10,在計算機中,有個概念叫位,一個byte是8位,我們下面討論的都將以8位爲準,例如1,在計算機中顯示爲0000 0001,那麼計算機中1+1=2,則逢2進1就是0000 0010,在java中如果要定義一個數爲二進制數,則可以這樣定義int a = 0b111;計算機中規定最高位是符號位正數用0表示,負數則用1表示,那麼-1則怎麼表示呢,是1000 0001嗎?答案是否定的,待會兒講到原碼、反碼、補碼的時候會提到.

八進制

  • 顧名思義 即逢8進1,同理9表示成 011,java中定義8進制數9則定義成 int a = 011,定義7爲 int a = 07

十六進制

  • 即逢16進1,同理9表示成 int a = 0x9,10可以表示成 int a = 0x10或者int a = 0xa,字母a-f分別可以表示數字10-15,因爲數字2位可能看起來不是很直觀

進制轉換

十進制 --> 二進制、十進制 --> 八進制、十進制 --> 十六進制

以5爲例

  • 轉成二進制則是0000 0101,如何計算的呢,有個公式5/2 = 2,餘數爲1,2除2=1,餘數爲0,1/2=0,餘數爲1,結果按餘數倒序101即結果

以10爲例

  • 轉成八進制則是0000 0012,同理10/8 = 1餘數爲2,1/8=0 餘數爲 1,結果按餘數倒序12即結果

以20爲例

  • 轉成十六進制爲0000 0014,也可以表示爲0xe,同理轉成16進制,20/16=1餘數爲4,1/16=0餘數爲1,結果按餘數倒序14即結果

原碼、補碼、反碼

在講解之前,先做一個小測試1-1,我們都知道在數學算數中減一個數等於加一個數的負數,而計算機並不能直接做減運算,1-1在計算機中表示爲1+(-1),下面是運算過程

0000 0001

+1000 0001

= 1000 0010(-2),
看到這裏是不是覺得很奇怪,感覺計算機是出bug了,實則是不對的,因爲計算機中對有符號的數運算都是以補碼爲基礎的,接下來我將分別介紹下什麼是原碼、反碼跟補碼

  • 原碼
    即二進制在計算機中本來的顯示方式,無符號數(即正數)最高位爲0,有符號數(即負數)最高位爲1,例如1的顯示爲0000 0001,-1的顯示爲1000 0001

  • 反碼
    正數反碼等於原碼,負數則二進制原碼中剔除最高位的符號位,其餘的數取反即可,例如-1的原碼1000 0001,剔除最高位取反爲1111 1110

  • 補碼
    正數的補碼=原碼=反碼(即三碼合一),負數的補碼計算規則首先將負數的絕對值轉成二進制,-1爲例,轉成絕對值1則爲0000 0001,然後再將其轉成反碼爲1111 1110,最後+1即1111 1111,這個就是-1的補碼,現在來回頭計算下之前的1+(-1)問題

    0000 0001

+1111 1111

=1 0000 0000,計算結果超過8位,計算機會主動去丟掉超過的位數,那麼最後結果即爲0000 0000,這樣結果就對啦
好了今天就簡單介紹到這裏,二進制相關的我會寫一篇專欄,下期將會介紹二進制的位運算,希望能幫助到大家一起進步.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章