
“嗨,阿米戈!”
“嗨,比拉博!”
“我想告訴你一些不同的編號系統。”
“您已經聽說過人們使用十進制系統。以下是該系統的主要事實:
1) 10位數字用於寫數字:0, 1, 2, 3, 4, 5, 6, 7, 8, 9。
2) 數字 543 表示 5 個百 + 4 個十 + 3 個個。
"這相當於寫成5*100 + 4*10 + 3*1,可以寫成5*10 2 + 4*10 1 + 3*10 0。
請注意,千、百、十和個是數字 10 的冪。
1)一是 10 的零次方。
2) 十是 10 的一次方。
3)一百是 10 的二次方。
4) 一千是 10 的三次方,等等。
“是的。知道了。”
“但現在想像一下,我們只有 8 位數字。然後我們有了八進制系統。以下是它的主要事實:”
1) 8位數字用於寫數字:0, 1, 2, 3, 4, 5, 6, 7。
2) 數字 543 8表示 5*8 2 +4*8 1 +3*8 0。也就是說,5*64 + 4*8 + 3*1 = 320+32+3 = 320+32+3=355 10
我寫了8和10作為下標,表示用多少位數來表示這個數。
“我想我明白了。我想我可以將一個數字從八進制系統轉換為十進制系統。但我可能不能走另一條路。”
“沒那麼難,想像一下,你需要用幾輛卡車來搬運一堆沙子。你有自卸車,有普通卡車,也有非常小的卡車。但卡車沒有裝滿就走不了。”
“你會怎麼做?”
“首先,我會裝滿自卸卡車,因為它們是最大的。然後,當我發現沒有足夠的沙子裝滿卡車時,我會換成較小的車輛。然後是更小的車輛。”
“這裡其實很相似,我們試試把355 10這個數字轉回八進制吧。”
“首先,我們將它除以 64 (8 2 ),得到 5,餘數為 35。這意味著我們數字的第一位數字是 5。然後我們將餘數除以 8 (8 1 ),得到 4,餘數的 3。因此,我們得到數字 543 8。 ”
”對了,你也可以往另一個方向移動,畢竟543 8 == 5*64+4*8+3 == ((5)*8+4)*8+3。我們的八進制“tens " 和 "hundreds" 必須除以 8。因此,除以 8 的餘數將是我們的八進制數字。"
“首先,我們將355除以8,得到44,餘數為3,即355=44*8+3。44可以表示為5*8+4。因此,355=(5*8+ 4)*8+3; 這是我們的數字:5, 4, 3。我們要找的數字是 543 8。"
“我想我明白了,但我需要稍微練習一下才能完全理解所有內容。”
“編程通常涉及使用不同基數的數字(即數字系統中使用的位數)。最流行的是 2、8、10、16 和 64。”
“但為什麼這是必要的?為什麼我們需要用 2、8、16 或 64 位數字表示的數字?”
“這是關於處理器內部如何工作的。很簡單,如果有電流流過電線,那麼我們說它的值為1;如果沒有電流,那麼它的值為0。所有數字都存儲在存儲單元中。這些細胞有一個非常基本的設計。它們只能存儲 0 或 1。”
“但這種簡化(只有 0 或 1)使得處理器和內存內部的元件變得非常小成為可能。現代處理器和內存模塊包含數十億個不同的元件。它們的面積通常不超過一平方厘米。”
“哇。現在我知道了。”
“現在我們轉向二進制數。這裡我們有與八進制相同的東西,只是更容易。”
1) 2位數字用於寫數字:0、1。
2) 數字 101 2表示 1*2 2 + 0*2 1 + 1*2 0。換句話說,就是 1*4+0*2+1*1 =4+1=51 10
“是的,我記得。一個單元格,可以有 0 或 1 的值,被稱為位。但它不能存儲太多信息,所以它們被組合成 8 個一組。這些組稱為字節。 “
“沒錯。一個字節是一組八位。它可以存儲以下值:00000000、00000001、... 11111111。這些值對應於十進制數 0,1、... 255。這使我們總共有256 個值。”
Java中最大的整數是多少?或者更確切地說,它的類型是什麼?
“一個長整型。一個長整型由 8 個字節組成。換句話說,64 位。它可以存儲從 -2 63到 2 63 -1 的值。
“是的。我不會涉及如何將數字從十進制轉換為二進制,反之亦然。否則,課程會太長。”
“相反,讓我們多談談十六進制系統。”
“是的,這很有趣。對於二進制和八進制系統,我們只是去掉了數字,分別從二和八開始。但是我們在這裡做什麼?添加新數字?”
“完全正確!看看這個:”
1) 16位數字用於寫數字:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
2)數字 543 16表示 5*16 2 + 4*16 1 + 3*16 0。換句話說,它是 5*256+4*16+3*1 = 1280+64+3 = 1347 10
“所以,我們只是將字母添加為數字?O_o”
“是的。有什麼大不了的?為什麼要在字母工作得很好的情況下發明新數字?檢查一下:”
十六進制數字 | 十進制值 |
---|---|
0 | 0 |
1個 | 1個 |
8個 | 8個 |
9 | 9 |
A | 10 |
乙 | 11 |
C | 12 |
丁 | 13 |
乙 | 14 |
F | 15 |
“我也不打算談論從十進製到十六進制的轉換。但這是一個有趣的事實。十六進制數字正好由 4 位表示,值從 0 到 15。因此,一個字節可以用八個二進制數字寫入(0 或 1)或兩個十六進制數字。”
“這是一個例子:”
十進制數 | 二進制數 | 十六進制數 |
---|---|---|
0 | 0000 0000 | 00 |
1個 | 0000 0001 | 01 |
15 | 0000 1111 | 0f |
16 | 0001 0000 | 10 |
31 | 0001 1111 | 1f |
32 | 0010 0000 | 20 |
128 | 1000 0000 | 80 |
129 | 1000 0001 | 81 |
255 | 1111 1111 | ff |
“十六進製表示很容易轉換為二進制(反之亦然)。這就是為什麼在編程中很少以二進制(使用 0 和 1)給出數字的內部字節表示。那樣太長且難以理解。十六進製表示法更具可讀性和緊湊性。”
“我同意。連我都喜歡。”
“順便說一句,Java 允許您直接在代碼中編寫各種編號系統中的數字:”
根據 | 特色 | 例子 | 無效數字 |
---|---|---|---|
2個 | 數字開頭的0b | 0b 00001111 | 0b 11111 2 1 |
8個 | 數字開頭的0 | 0 1234343 | 0 12 8 |
10 | 沒有任何 | 95459 | 909個 |
16 | 數字開頭的0x | 0x 10ff | 0x 1c高 |
“很棒的一課。謝謝你,Bilaabo。”
GO TO FULL VERSION