能用二進位做那些有趣或有用的事?
「讀心術」,騙騙啥都不懂的小 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與堆疊+埠聚合哪種方案更適合數據中心橫向流量呢?
※如何評價@左耳朵耗子 的《關於阿里雲經典網路的問題》?