關於計算機的二進位,首先來想想我們日常使用的十進位。
那麼為什麼我們日常要使用十進位呢?其實看看你的雙手,一共有幾根手指?是不是一共十根?那麼10 代表的就是一雙手的手指的數量。例如1234,他所代表的示意是:
1 * 1000 + 2 * 100 + 3 *10 + 4 *1 。
換一個形式就是1 * 10^3 + 2 * 10^2 + 3 * 10^1 + 4 * 10^0 。
但是到了計算機裡這種數值表述方式就麻煩了,如果我們要在計算機保存十進位數值那麼,計算機得有能力用某種形式描述出至少10種狀態才行也就是0到9。
那麼想像一下要是我們每隻手只有3個手指,那麼如果10 依舊代表一雙手(六根手指),此時12相當於一雙手加兩個手指 也就是「八」。這種計數方式我們可以稱為6進位。那麼234這個數值在六進位裡代表什麼呢?2 *6^2 + 3*6^1 + 4*6^0
遺憾的是計算機沒有手指。那它如何描述不同的數值呢?使用高低電平(也就是較高電壓和較低電壓),舉個例子,假如你有一個電子遊戲機,它使用的是三節5號電池,電壓就是4.5V,那麼它會用大於2.5v的電壓代表高電平小於1v的電壓代表低電平,這樣就可以區分出兩種不同的狀態。為什麼這麼幹呢?因為使用這種表述方式的電路設計相對簡單。
這就好像計算機一共只有兩根不同的手指。那麼怎麼描述數值呢?使用「二進位」方式。
在十進位裡,我們的每一位數值需要10種狀態 0 1 2 3 4 5 6 7 8 9 ; 那麼二進位裡只需要 0 和1 就夠了,並用高電平對應1,低電平對應0。這個時候 10 依舊代表計算機的全部「手指」,也就是 「二」。110呢?自然就是 1 * 2^2 + 1 * 2^1 + 0 * 2^0 也就是 1*4 + 1*2 + 0這不就是相當於十進位裡的6嘛!那麼1010呢 1*2^3 + 0 * 2^2 + 1 *2^1 + 0 *2^0 這是不是就是十進位數值裡的 「十」 ?
但是新的困惑又來了。如果我們寫一個 數字 10 在我們不知道它的進位的前提下,你能確定它到底代表的是幾個手指嗎?可能是 二 可能是 六 也可能是 十。所以為了在書寫是方便區分一般我們要在二級制數值前面加一個標記「0B」,也就是 0B10 或者換一個數字 0b10101010。
最後我們來試著計算一下 0b1111 是我們人類自然數值中的幾?8 + 4 +2 +1 = 15
0b1011呢? 8 + 0 + 2 + 1 = 11
0b1100 8 + 4 + 0 +0 = 12
那麼 十進位的 9 呢?變成二級制就是 0b1001
123 就是 0b01111011
這樣我們就可以讓計算機用二級制保存保存我們人類的自然數啦。