能用二進位做那些有趣或有用的事?


「讀心術」,騙騙啥都不懂的小 P 孩絕對逼格高,甚至你知道二進位,也很容易被高大上的外表蒙蔽。

以下是其中的一種表現形式:

六張卡片上面分別寫有一些數字(1-64),邀請任何測試者默記一個範圍內的數字,告知分別出現在哪幾張卡片上,便可得知被試者的數字是誰。

變體,將數字換成任何不同的東西,比如人臉、食物、地名……逼格更高。(宅男們來我們玩個遊戲,猜女優……)

----- (可能會)不定期更 -----


很多專業人士從第一次學計算機,就開始接觸二進位,發現書上說的基本都是術語,不是「人話」,馬上暈倒。二進位是什麼?什麼「逢二進一」,這都不重要,狗屎。只要是人發明的東西,用人話就能講清楚。

咱們就用人話,看看能不能講清楚「二進位」。

咱們穿越啦,回到古代。你在一個烽火台上,我在另一個烽火台上,只要你那邊來敵人,你就點狼煙通知我。這個能懂吧?現在,我想清楚的知道你那兒來了幾個敵人,我好做準備工作。怎麼辦呢?很簡單,兩個辦法。

1、你點一次火,再滅掉一次,算是一個敵人,來兩個就點2回,滅兩回。

2、或者你同時點兩堆火。我就知道,是來了兩個敵人。

我去,你說要是敵人來了200個怎麼辦?你那邊要麼熏死,要麼火堆多到足夠自焚了……

朝代在發展,人類在進步。一晃愛迪生來過地球了,他發明燈泡了。

你可以用燈泡「亮」和「滅」來跟我表示這個信息。

如果一個燈泡沒亮,說明沒有敵人。燈泡沒亮,也可以說是狀態0。

如果來了一個敵人,燈泡亮了,我就知道來了1個,這就是狀態1。

問題又來了,還是來了200個敵人……我去,要麼你開關200次燈泡,要麼準備200個燈泡一起亮。第一個方法燈泡質量也不一定好,再說,你閃那麼快,我也數不過來。第二個方法,我數也得數小半天,沒數完,早被敵人衝過來砍死了。還有,200個燈泡,你確定你那兒電費餘額夠不?

好在咱們都是聰明人,咱們約定,多安幾個燈炮打暗號。為了不用畫圖,0代表關燈,1代表開燈。

00000000,8個燈全關,放心睡覺,這是狀態0,說明一個敵人沒有,平安無事。(狀態0)

00000001,這說明來了一個敵人,你負責幹掉他就行了。(狀態1)

00000010,這是第二個能表示的狀態,咱們給它個編號,叫狀態2,說明來了兩個敵人,也沒啥大事。

接下來,應該是第三種情況了。00000011,這就是第三種情況。咱們不說換算什麼的,這種亮燈的方法咱們就叫3(狀態3)。

為了讓咱倆都明白,咱們寫個清單(文章最後)出來。由清單能看出來,如果來了255個敵人,你直接打開8個燈泡,我也就一目了然,準備刀槍就上了。

因為電腦也一樣,只有開和關(通電、斷電)來表示兩種狀態。這就叫「二進位」了。至於2進位怎麼計算,也很簡單,比如第一種狀態(1)+第二種狀態(2)=第三種狀態(3)。你看:

00000001

+00000010

---------

=00000011,按表格一找,是3,就是這麼簡單。

所以,腦子裡別想著10進位和2進位怎麼換算,這些臟活兒累活兒,可以電腦去干。你只要記住表格里的「二進位第幾種狀態就是10進位中的幾」就可以了。

還有,磁碟里的2進位,用磁鐵的N極和S極表示1和0,N=0,S=1,把硬碟放大了1000萬倍看看,上面都是小磁鐵,通過硬碟的磁頭識別,再變成電流信號「通」和「斷」來交給CPU處理。

那光碟上也一樣,光碟上是用「長」和「短」的小鏡子來表示1和0。把光放大了1000萬倍看看,上面都是長點和短點,用激光頭一照,根據反光的長度來表示數據。

那數據多了怎麼辦?8個編成一組,叫1byte,也就是傳說中的1個位元組,是由8個0或1組成的,每個0或1叫1bit。通常,一個英文字母需要8個燈泡表示,一個漢字需要16個燈泡表示。

順便說一下,一下能讓我看清8個燈泡亮沒亮的方法,叫「並行」(8位),用1個燈泡來回開關,妄圖晃瞎我的傳遞數據的方法叫「串列」,也就是一串信號的意思。所以,頻率相同的情況下,「並行」肯定比「串列」快。

想一次能處理的信息越多,就需要越多的「位」數,比如你家CPU是64位的,就相當於一次能傳遞64個燈泡組成的信息。

先講這麼多吧,中心思想只有一個「技術課講的好,也很有意思!」

再贈送一個知識點,在EXCEL里可以用公式=DEC2BIN()來換算。

附表:

10進位編號 燈泡表示

狀態 1 00000001

狀態 2 00000010

狀態 3 00000011

狀態 4 00000100

狀態 5 00000101

狀態 6 00000110

狀態 7 00000111

……(以此類推)

狀態 250 11111010

狀態 251 11111011

狀態 252 11111100

狀態 253 11111101

狀態 254 11111110

狀態 255 11111111


在計算機的底層,從物理現實來理解就是電平的高低變換,如果從概念層面理解,二進位和十進位其實都是一個東西,只是我們用來描述自然世界的工具而已。所以二進位能做什麼?答案自然是不言而喻的了。


想起了小學的一個奧數題,一根長15厘米的尺子,能不能只刻上4個刻度,便可量出1-15之間任何整厘米的長度?如果尺子是1500厘米甚至更長呢?應該怎麼樣在尺子上標記最少的刻度就能量出1-1500甚至更長的整厘米數?這個問題就涉及到數據進位(不僅僅是二進位),夠有趣吧!

(二進位)1111 == 15

在尺子上刻上1、2、4、8這4個刻度就可以通過數據組合,量出1-15的任意整厘米數。

現在尺子變成1500厘米了,怎樣才能用最少的刻度,量出1-1500之間的任何整厘米數?

能否推導出通用的公式方法選擇出最優的刻刻度的方案?


學好數字電子技術


推薦閱讀:

網線中傳輸的是電流還是還是電磁波呢?
HTTP 頭裡的 user-agent 可以隨便填嗎?
Trill、SPB與堆疊+埠聚合哪種方案更適合數據中心橫向流量呢?
如何評價@左耳朵耗子 的《關於阿里雲經典網路的問題》?

TAG:數學 | 計算機網路 | 二進位 | 科學 | 裝腔手冊 |