1.八進制編碼

說到編碼...如您所知,在日常生活中我們使用十進製表示法:我們所有的數字都使用 10 個符號表示:0、1、2、3、4、5、6、7、8、9。共有 10數詞,故稱十進制。

但程序員是偉大的發明家。他們立即想出了使用不同數量符號的編碼。例如,16、8 和 2。

使用 8 個符號的替代編碼是最簡單的:只需刪除 8 和 9 即可獲得八進制編碼(八進制數字系統)。

而且,是的,您可以使用八進制系統來指定數字文字。如果,當然,你真的需要。這比聽起來容易。您只需要在數字前寫上數字 0 即可。

換句話說,Java 將任何以 0 開頭的整數文字視為八進制值。

例子:

代碼 筆記
int x = 015; 
x 為 13:1*8+5
int x = 025; 
x 為 21:2*8+5
int x = 0123; 
x 為 83:1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0
int x = 078;
這不會編譯:8 不是八進制編碼中使用的符號之一。

您不太可能需要在代碼中編寫八進制數,但您應該知道它們是什麼。畢竟,您將不得不閱讀其他人編寫的代碼。如上所述,程序員是大發明家。

好吧,請記住,您不能簡單地在每個數字前寫上 0。



2.二進制編碼

二進制編碼更有趣。如果八進制只有數字 0-7,那麼二進制只有 0 和 1。為什麼需要這種編碼?

這與計算機的內部結構息息相關。計算機中的一切都靠電力運行,碰巧的是,使用電力存儲和傳輸某些東西的最有效方法是使用兩種狀態:電線中沒有電(零)和有電(一)。

這就是二進制數字系統流行的由來。

原則上,它在 Java 中並不經常使用:Java 被認為是一種高級語言,完全從其運行的硬件中抽像出來。事實上,您真的關心計算機內部使用什麼格式存儲和處理數據嗎?

但在過去的幾十年裡,程序員開始喜歡上二進制編碼(以及其他基於它的編碼)。因此,Java 具有將二進制數作為輸入的運算符。浮點數的準確性取決於它們的二進製表示。

基本上,了解這種編碼總比不知道好。

與八進制編碼的情況一樣,Java 有一種使用二進制系統對文字進行編碼的方法。也就是說,文字僅由 0 和 1 組成。為了讓Java 編譯器理解代碼包含以二進制編碼的數字文字,而不是簡單的由 0 和 1 組成的十進制數,所有二進製文字都使用前綴0b標識('b' 來自單詞 binary) .

例子:

代碼 筆記
int x = 0b100; 
х為4:1*4+0*2+0
int x = 0b1111; 
х為15:1*8+1*4+1*2+1
int x = 0b1111000111; 
х為967:1*2 9 +1*2 8 +1*2 7 +1*2 6 +0*2 5 +0*2 4 +0*2 3 + 1*2 2 + 1*2+1;
int x = 0b12000;
這不會編譯:2 不是二進制編碼中使用的符號之一。


3.十六進制編碼

除了八進制和二進制編碼,文字也可以寫成十六進制。這是一種非常流行的編碼。

這是因為儘管二進製表示法盡可能接近數字的實際存儲方式,但人類很難有效地處理這些數字:在二進制中,100 萬包含 20 位數字,而不是 7 位。

這就是程序員想出十六進制系統的原因。畢竟 16 是 2 的4次方,所以 4 位恰好對應一個十六進制數字。粗略地說,現在每 4 位可以寫成一個十六進制數字。

十六進制編碼也有自己獨特的前綴:0x。例子:

十進制數 二進制符號 十六進製表示法
17 0b 0001 0001 0x 1 1
4 1 0b 0010 1 00 1 0x 2 9
85 0b 0101 0101 0x 5 5
256 0b 1 0000 0000 0x 1 0 0

好吧,你說,很清楚我們是如何得到八進制系統的:我們只是丟掉了數字 8 和 9,但是我們從哪裡得到十六進制系統的 6 個額外符號呢?我想見他們!

一切都很簡單。取英文字母的前6個字母作為6個缺失符號:A(10)、B(11)、C(12)、D(13)、E (14)、F (15)。

例子:

十六進製表示法 二進制符號 十進制數
0x 1 0b 0000 0001 1個
0x 9 0b 0000 1001 9
0xA _ 0b 0000 1010 10
0x 0b 0000 1011 11
0x C 0b 0000 1100 12
0xD _ 0b 0000 1101 13
0x E 0b 0000 1110 14
0xF _ 0b 0000 1111 15
0x 1F _ 0b 0001 1111 31
0x A F 0b 1010 1111 175
0x F F 0b 1111 1111 255
0x F F F 0b 1111 1111 1111 4095


4.如何將數字從十六進制轉換

將數字從十六進制轉換為十進制非常容易。假設您有數字0 x A F C F。十進制是多少?

首先,我們有一個位置數字系統,這意味著當我們從右向左移動時,每個數字對總數的貢獻增加了 16 倍:

A * 16 3 + F * 16 2 + C * 16 1 + F

符號A對應數字10,字母C對應數字12,字母F代表十五。我們得到:

10 * 16 3 + 15 * 16 2 + 12 * 16 1 + 15

將 16 乘以對應於數字的各種冪,我們得到:

10 * 4096 + 15 * 256 + 12 * 16 + 15

我們總結一切並得到:

45007

你知道這個數字是如何存儲在內存中的:

0x A F C F

但是現在讓我們把它轉換成二進制。在二進制中它將是:

0b 1010 1111 1100 1111

每組四位正好對應一個十六進製字符。那是超級方便。沒有任何乘法或取冪。”