1.八進制編碼
說到編碼...如您所知,在日常生活中我們使用十進製表示法:我們所有的數字都使用 10 個符號表示:0、1、2、3、4、5、6、7、8、9。共有 10數詞,故稱十進制。
但程序員是偉大的發明家。他們立即想出了使用不同數量符號的編碼。例如,16、8 和 2。
使用 8 個符號的替代編碼是最簡單的:只需刪除 8 和 9 即可獲得八進制編碼(八進制數字系統)。
而且,是的,您可以使用八進制系統來指定數字文字。如果,當然,你真的需要。這比聽起來容易。您只需要在數字前寫上數字 0 即可。
換句話說,Java 將任何以 0 開頭的整數文字視為八進制值。
例子:
代碼 | 筆記 |
---|---|
|
x 為 13:1*8+5 |
|
x 為 21:2*8+5 |
|
x 為 83:1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0 |
|
這不會編譯:8 不是八進制編碼中使用的符號之一。 |
您不太可能需要在代碼中編寫八進制數,但您應該知道它們是什麼。畢竟,您將不得不閱讀其他人編寫的代碼。如上所述,程序員是大發明家。
好吧,請記住,您不能簡單地在每個數字前寫上 0。
2.二進制編碼
二進制編碼更有趣。如果八進制只有數字 0-7,那麼二進制只有 0 和 1。為什麼需要這種編碼?
這與計算機的內部結構息息相關。計算機中的一切都靠電力運行,碰巧的是,使用電力存儲和傳輸某些東西的最有效方法是使用兩種狀態:電線中沒有電(零)和有電(一)。
這就是二進制數字系統流行的由來。
原則上,它在 Java 中並不經常使用:Java 被認為是一種高級語言,完全從其運行的硬件中抽像出來。事實上,您真的關心計算機內部使用什麼格式存儲和處理數據嗎?
但在過去的幾十年裡,程序員開始喜歡上二進制編碼(以及其他基於它的編碼)。因此,Java 具有將二進制數作為輸入的運算符。浮點數的準確性取決於它們的二進製表示。
基本上,了解這種編碼總比不知道好。
與八進制編碼的情況一樣,Java 有一種使用二進制系統對文字進行編碼的方法。也就是說,文字僅由 0 和 1 組成。為了讓Java 編譯器理解代碼包含以二進制編碼的數字文字,而不是簡單的由 0 和 1 組成的十進制數,所有二進製文字都使用前綴0b標識('b' 來自單詞 binary) .
例子:
代碼 | 筆記 |
---|---|
|
х為4:1*4+0*2+0 |
|
х為15:1*8+1*4+1*2+1 |
|
х為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; |
|
這不會編譯: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
每組四位正好對應一個十六進製字符。那是超級方便。沒有任何乘法或取冪。”
GO TO FULL VERSION