10分鐘帶你瞭解什麼是二進制

无妻徒刑 2024-05-02 09:00 10次浏览 0 条评论 taohigo.com

上面這是流傳在程序員之間很久的一個冷笑話。

是不是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進10123456789101112131415當要數10時,就要進1位,也就是十位數寫1個位數寫0就是10啦

二進制就是滿2進1,01101110100當要數2的時候,就要進1位瞭,下一位寫1,當前位變成0也就是10

二進制轉十進制

那麼我們看到一個二進制的數,如何知道它表示的10進制的數是幾呢?我們還是想一下十進制的101,我們可以很輕松的讀出來這是 一百零一但是我們怎麼知道 一零一 就是 一百一十一呢?因為我們知道從右邊向左數第一位是個位,這個位的數字是幾就是幾第二位是十位,這個位的數字是幾就表示幾十第二位是百位,這個位的數字是幾就表示幾百

所以101 = 1×100 + 0x10 + 1×1一個一百 + 零個10 + 一個一

我們這裡引入一個新名詞權重(Weight) 來表示每一位的實際意義個位–權重 1 = 10^0 十的零次方十位–權重 10 = 10^1 十的一次方百位–權重 100 = 10×10 = 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 = 2×2= 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=1x(2^1)+0x(2^0)=1x2+0x1=2其實就是十進制的2

會心一笑瞭嗎?