世界上有10種人:壹種是懂得二進制的,另壹種是不懂二進制的
上面這是流傳在程序員之間很久的壹個冷笑話。
是不是get不到梗的笑點?
沒有關系,看完本文,妳再來看這句話就會會心壹笑。
回到過去
讓我們假設妳回到了初中,這時候妳情竇初開。喜歡上了臨街的小哥哥(小姐姐),妳們倆家的窗戶面對面。放寒假的時候,妳們約好了某天晚上八點偷偷溜出來約會。但是不能讓父母知道,所以妳們不能通過打電話方式來通知對方,今晚自己是否能順利溜出來。為了不讓對方白等,妳們不得不約定壹種新的通信方式。
這種新的通信方式要滿足:
安靜--不能讓父母聽到,能悄無聲息自然是最好了
易懂--對方看到後能立馬知道妳要表達的信息
因為住的很近,可以從窗戶相互看到對方家裏,聰明的妳立馬想到可以用屋子裏吊燈的燈光來進行通信。
妳們約定到了八點鐘
如果我屋子裏的燈亮著,代表我可以順利溜出去
請點擊輸入圖片描述
如果我屋子裏的燈不亮,代表我無法順利溜出去
請點擊輸入圖片描述
現在妳們就可以用屋子裏的燈開關,來表達兩種狀態
開:能出來
關:不能出來
妳們可以悄無聲息給對方傳達信息,這太完美了!
新的問題
不過過了壹段時間妳們發現了新問題,有時候,8點鐘恰好有事情,可能要推遲半小時才能溜出來。有時候,8點鐘事情比較多,可能要推遲1小時才能出來。
現在妳們有四種信息要傳遞
今晚8點鐘準時出來
今晚不能出來
今晚8點30能出來
今晚9點能出來
但是壹盞燈的開關只能表示兩種狀態,怎麽辦才好呢?
聰明的妳立馬想到,可以再加壹盞燈啊!妳把書桌上的臺燈放到窗前
並且更新了之前的通信方式
臺燈關著,吊燈關著--今晚沒戲,出不來了
請點擊輸入圖片描述
臺燈關著,吊燈開著--今晚8點,不見不散
請點擊輸入圖片描述
臺燈開著,吊燈關著--推遲半小時,今晚八點半才能溜出來
請點擊輸入圖片描述
臺燈開著,吊燈開著--推遲1小時,今晚9點才能溜出來
請點擊輸入圖片描述
哇哦,再壹次用自己的聰明才智解決了這個問題。
現在妳用兩盞燈,來表達四種狀態。
壹些思考
讓我們用符號來重新表述下
我們用數字0表示燈滅
數字1表示燈亮
壹盞燈的情況
0 ==> 今晚八點準時出來
1 ==> 今晚八點不能出來
兩盞燈的情況
0 0 ==> 今晚沒戲,出不來了
0 1 ==> 今晚8點,不見不散
1 0 ==> 推遲半小時,今晚八點半才能溜出來
1 1 ==> 推遲1小時,今晚9點才能溜出來
讓我們再來簡化壹下箭頭右邊,我們用數字0,1,2,3 分別來代表今晚約會的4種狀態
0: 今晚沒戲,出不來了
1: 今晚8點,不見不散
2: 推遲半小時,今晚八點半才能溜出來
3: 推遲1小時,今晚9點才能溜出來
現在我們可以把兩邊都用數字來簡化了
00 ==> 0
01 ==> 1
10 ==> 2
11 ==> 3
如果我們再加壹盞燈,能表示多少種狀態呢?
000 ==> 0
001 ==> 1
010 ==> 2
011 ==> 3
100 ==> 4
101 ==> 5
110 ==> 6
111 ==> 7
壹***是8種
好了,現在我告訴妳,已經開始使用二進制了!
沒錯!
左邊的是二進制,右邊就是相對應的十進制
比如說二進制的 111 代表的就是我們常用十進制的 7
為什麽呢?
雖然妳可能不太相信,但是確實妳已經開始使用二進制了。
那麽二進制到底是怎麽回事呢?
我們日常生活中所用的都是十進制,也就是滿10進1
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
當要數10時,就要進1位,也就是十位數寫1個位數寫0
就是10啦
二進制就是滿2進1,
0
1
10
11
10
100
當要數2的時候,就要進1位了,下壹位寫1,當前位變成0
也就是10
二進制轉十進制
那麽我們看到壹個二進制的數,如何知道它表示的10進制的數是幾呢?
我們還是想壹下十進制的101,我們可以很輕松的讀出來這是 壹百零壹
但是我們怎麽知道 壹零壹 就是 壹百壹十壹呢?
因為我們知道
從右邊向左數
第壹位是個位,這個位的數字是幾就是幾
第二位是十位,這個位的數字是幾就表示幾十
第二位是百位,這個位的數字是幾就表示幾百
請點擊輸入圖片描述
所以101 = 1x100 + 0x10 + 1x1
壹個壹百 + 零個10 + 壹個壹
我們這裏引入壹個新名詞權重(Weight) 來表示每壹位的實際意義
個位--權重 1 = 10^0 ?十的零次方
十位--權重 10 = 10^1 十的壹次方
百位--權重 100 = 10x10 = 10^2 十的二次方
千位--權重 1000= 10x10x10 = 10^3 十的三次方
可以看到從右邊向左 權重依次擴大10倍
所以我們其實可以到這樣的結論
其實就是每壹位的數字乘以此位的權重,然後相加
101 = 1x10x10 + 0*10 + 1x1
用次方表示
101 = 1x(10^2) + 0x(10^1) + 1x(10^0) = 1x100 + 0x10 + 1 =101
OK我們如何表示知道二進制具體的大小,只需要套用這個公式即可
那麽首先我們要知道二進制每壹位的權重是多少
既然十進制每壹位權重都是10的次方數
那麽二進制的每壹位權重自然是2的次方數了
從右向左數
第壹位 1 = 2^0 二的零次方
第二位 2 = 2^1 二的壹次方
第三位 4 = 2x2= 2^2 二的二次方
那麽回到我們之前的問題,
二進制的101,我們從上文的狀態表可以知道
000 ==> 0
001 ==> 1
010 ==> 2
011 ==> 3
100 ==> 4
101 ==> 5
110 ==> 6
111 ==> 7
代表的是5
轉換過程
101 = 1x(2^2)+0x2^1 + 1x(2^0) = 1x4+0x2+1=5
怎麽樣,很簡單吧!
get 這個梗
再回到我們最初那個冷笑話
世界上有10種人:壹種是懂得二進制的,另壹種是不懂二進制的這裏的10其實是二進制的,轉換成十進制就是 10=1x(2^1)+0x(2^0)=1x2+0x1=2
其實就是十進制的2
會心壹笑了嗎?