二進制數的表示法,例如 1000100B - 1

“嗨,阿米戈!”

“嗨,比拉博!”

“我想告訴你一些不同的編號系統。”

“您已經聽說過人們使用十進制系統。以下是該系統的主要事實:

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。”