一、老師說記得剛學(xué)計(jì)算機(jī)時(shí),我就聽老師說,電腦采用的是二進(jìn)制計(jì)數(shù)。也就是說,在電腦的世界里,它只認(rèn)識(shí) 1 和 0 。 那時(shí)雖然理解不了,但是也沒有多問。理解不了是因?yàn)?,鍵盤上明明有 3、4、5,你卻說它只認(rèn)識(shí) 1 和 0。沒有多問是因?yàn)?,老師說了就這么記。 慢慢隨著年齡的增長愛上了這一行,就想深扎在這個(gè)行業(yè),因此必須搞懂最基礎(chǔ)的知識(shí)。 二、進(jìn)制是什么日常生活中常見的計(jì)數(shù)方式是十進(jìn)制,十進(jìn)制也就是逢十進(jìn)一。 拿我最喜歡國產(chǎn)產(chǎn)品人民幣來舉例:十個(gè)一塊是十塊,十張十塊是一百,十張一百是一千。 但是在這世界上不是只有十進(jìn)制,進(jìn)制還有很多,比如:二十進(jìn)制、九進(jìn)制、六十四進(jìn)制等,目前大約共有二十五種進(jìn)制在使用。 那么,我們?yōu)槭裁磿?huì)選擇十進(jìn)制呢? 話說那年連秦始皇都還沒有出生,在古希臘有一個(gè)叫亞里士多德的老頭,他做了一個(gè)解釋:可能是因?yàn)槿祟愔挥惺畟€(gè)手指頭。因此,在清點(diǎn)獵物的時(shí)候,數(shù)到十后面就沒有了。所以每當(dāng)數(shù)完十個(gè)數(shù),就走過去一個(gè)人。這就是逢十進(jìn)一,一個(gè)人就代表十頭獵物。 有人就會(huì)困惑,手指頭數(shù)完了,還有腳指頭吶!那時(shí)也沒有皮鞋,冬天也一樣數(shù),根本不耽誤。是的,瑪雅文明采用的就是二十進(jìn)制,人家就是數(shù)腳指頭?,斞湃说亩M(jìn)制,不是觀察腳指頭。他們是觀察天體運(yùn)行,以一圈是 360 度,一年 360 天,推導(dǎo)出來 20 是一個(gè)基本單位。因此,逢二十進(jìn)一。 除此之外,巴比倫文明采用的是六十進(jìn)制,逢六十進(jìn)一。為什么是六十?因?yàn)樗麄円詴r(shí)間為基本單位,一個(gè)小時(shí)是六十分鐘,一分鐘是六十秒。 雖然十進(jìn)制,最早由亞里士多德做了解釋。但是,多勞不一定多得。十進(jìn)制是我國發(fā)明的。證據(jù)就是在甲骨文中就有“十”、“百”、“千”、“萬”等文字標(biāo)記。 反正吧,說這么多,不管多少進(jìn)制,它出現(xiàn)肯定是有場景支撐的,是有原因的。 現(xiàn)在你可以回看一下本篇文章的標(biāo)題,計(jì)算機(jī)使用哪種進(jìn)制?沒錯(cuò)二進(jìn)制,那么電腦為什么會(huì)采用二進(jìn)制呢?這就是下面我們要探索的內(nèi)容。 三、計(jì)算機(jī)為什么選二進(jìn)制3.1 二進(jìn)制原理 首先我要告訴你計(jì)算機(jī)的俗稱名叫:電腦,字體加大而且加粗紅色標(biāo)注了。也就是說想要在電腦里存東西,那得先通電。 電腦通過控制電路進(jìn)行數(shù)據(jù)的存儲(chǔ)和運(yùn)算,計(jì)算機(jī)先驅(qū)們?yōu)榱俗岆娔X能存點(diǎn)東西,可謂是費(fèi)盡心機(jī)。最后,他們研究出一種叫觸發(fā)器的元件,一個(gè)觸發(fā)器可以存儲(chǔ) 1 位二進(jìn)制代碼。 寄存器的存儲(chǔ)電路通常是由觸發(fā)器構(gòu)成的,因?yàn)橐粋€(gè)觸發(fā)器能存儲(chǔ) 1 位二進(jìn)制數(shù),所以 n 個(gè)觸發(fā)器就可以構(gòu)成 n 位寄存器,可以將寄存器理解成多個(gè)觸發(fā)器組成的暫存單元。 上面這張圖片看不懂太復(fù)雜的話,這里畫一張簡略圖。 上圖已經(jīng)標(biāo)示的很清楚了 i 是 input 的簡稱,表示輸入;o 是 output 的簡稱,表示輸出;s 代表 switch,表示開關(guān);這里多說一句通電用 1 表示,斷電用 0 表示。 上圖中當(dāng)我們給開關(guān) s 通電時(shí),i 通電 o 就有電,i 不通電 o 就沒電。 上圖中當(dāng)我們給開關(guān) s 斷電時(shí),o 最后狀態(tài)是什么,它最后就保持住那個(gè)狀態(tài)。 重點(diǎn)來了啊,上面這兩個(gè)動(dòng)圖就是電路組合實(shí)現(xiàn)的原理圖。因此如果我們想要存儲(chǔ)個(gè)狀態(tài),那么就給 s 通電,然后改變 i 的值,于是 o 就跟著變了。這樣就算是 s 斷電,o 已經(jīng)把狀態(tài)記錄下來了。 3.2 1 位寄存器 1 位的寄存器就實(shí)現(xiàn)了高電平或者低電平狀態(tài)的存儲(chǔ)。高電平我們稱為 1,低電平用 0 表示。因此 1 位的寄存器可以存一個(gè)數(shù),那就是 1 或 0,更完整的動(dòng)圖顯示如下圖。 1 位寄存器存儲(chǔ)完整動(dòng)圖 四、編碼是什么?只存一個(gè) 1 或者 0 有什么用?其實(shí)用處真不大。但是舉一反三,多存一些會(huì)不會(huì)有用呢?有句話叫做量變引起質(zhì)變。 下面的圖是一個(gè) 8 位的寄存器,也就是 8 個(gè)小寄存器組合起來了。 我們來計(jì)算一下,1 位可以存 1 個(gè)二進(jìn)制數(shù)??梢源?1,或者是 0,有 2 種可能。那么,8 位就可以存儲(chǔ) 8 個(gè)數(shù)。這 8 個(gè)數(shù)可以是 1 或 0 兩種情況,組合起來就是 2×2×2×2×2×2×2×2=256 種情況:00000001、00000010、00000011… 我們把 1 位二進(jìn)制,稱為 1 bit(比特)。8 個(gè)比特我們叫 1 個(gè) byte(字節(jié))。因?yàn)?8 位寄存器比較普遍,當(dāng)成一個(gè)單位,所以 1 byte = 8 bit 也就是一個(gè)字節(jié)有 256 種情況。不要小瞧這一個(gè)小小的 8 位寄存器,它也有很多不同的玩法。
其實(shí)上面采用符號(hào)位來表示正負(fù)數(shù)的方式,這就出現(xiàn)了編碼的概念。通過編碼,可以做更多的事情。 對(duì)于數(shù)字來說,0 到 9 就足夠了。其他的數(shù)值,我們完全可以從這 10 個(gè)基本數(shù)字當(dāng)中組合出來。我們的比特有限,還有更多的信息需要通過編碼來表示。 六、字符的編碼你現(xiàn)在看到的這段字,計(jì)算機(jī)里是怎么存儲(chǔ)的,你知道嗎?就比如“IT”這兩個(gè)字符。你可能說,存的就是兩個(gè)字符呀!一個(gè)“I”,一個(gè)“T”,我鍵盤敲上去,ctrl+s 保存到我的 word 文件中。 我的讀者朋友,計(jì)算機(jī)只認(rèn)識(shí) 1 和 0,到什么時(shí)候也是這樣。你屏幕上看到的都是假象,不是本質(zhì)。對(duì)于字符的存儲(chǔ),也采用了編碼的原理。 下面是其中一種,它叫ASCII字符編碼。這套編碼標(biāo)準(zhǔn)是60多年前發(fā)明的。 1 字節(jié)可以表示從 0 到 256,這里它就用了一半,將 0 到 127 表示了一系列字符。其實(shí),大寫字母 I,是第 73 號(hào)(二進(jìn)制1001001),大寫字母 T 是 84 號(hào)(二進(jìn)制1010100)。 有了這個(gè)標(biāo)準(zhǔn)之后,當(dāng)你在鍵盤上按下了 I,到了電腦里實(shí)際存的是 73(1001001)這個(gè)數(shù)。當(dāng)你下次讀取的時(shí)候,電腦看到是 73,怕你不明白,再轉(zhuǎn)化為一個(gè) “I” 形狀的圖形顯示到屏幕上。其實(shí),電腦根本不知道 “I” 是什么東西。電腦也不知為啥你要看一個(gè)圖形。但是,作為一個(gè)電腦,它還是照做了。 對(duì)于英文語言來說,它們是 26 個(gè)字母的組合,因此這 128 個(gè)字符,已經(jīng)完全可以滿足日常的使用。它們甚至還能玩?zhèn)€花樣。比如 7 號(hào),它的字符是 beep。你要是 print 一下它的話,你的電腦會(huì)發(fā)出 “嗶~” 的聲音。 編碼都是人為規(guī)定的,你有 ASCII 編碼,我也可以有其他編碼,這是計(jì)算機(jī)行業(yè)規(guī)范的事情。拿我們的漢字來說,它的情況就多了去了。因此,128 就承載不了,256 也不行啊。于是,我們常常聽說,一個(gè)漢字占 2 個(gè)字節(jié),也就是有 256×256=65536 種情況。這么多,就夠用了。 用 1 和 0 通過編碼構(gòu)成文字,相信你理解了。那些個(gè)圖片、音頻、視頻這些多媒體文件,它們又是怎么用 1 和 0 構(gòu)成的呢? 七、文件的編碼其實(shí)圖片、音視頻這些多媒體文件,以及其他各種類型的源文件,它們的存儲(chǔ)也都是編碼。 比如一張圖片你用肉眼看到的是視覺上的圖片,但在計(jì)算機(jī)中它也是以數(shù)據(jù)符的形式存儲(chǔ)的。下面我就以字符文本的方式,打開了一張圖片(這種打開的方式不對(duì))。 你表面上看,它存的是字符。其實(shí)這主要是為了能在屏幕上呈現(xiàn)。再往里深究,它存的依然是 1 和 0。那么,圖片是怎么來編碼呢?我們都知道,圖片是由像素組成的。 我們可以按照一定的規(guī)則,將這些像素格子用數(shù)表示出來。 另外,顏色也是可以用數(shù)字編碼的。 因此訂一套規(guī)則就可以了,比如我上面打開的那張圖,它一開始就指出這是一個(gè) gif 格式的圖片。后面的數(shù)據(jù),可能就是有多少個(gè)像素,每一個(gè)都是什么顏色等類似的信息。 音頻文件也是,音頻何嘗不能用數(shù)據(jù)來描述呢? 因此它也是編碼,下面是我打開的一段音頻文件。 我再打開一個(gè) PPT 給大家看看。 其實(shí)也類似,看著像是亂碼其實(shí)都是編碼數(shù)據(jù)。還有視頻等等等等基本原理也類似,區(qū)別就在于其編碼方式等規(guī)則不同。 八卦一下最后說一下八卦,現(xiàn)在也有學(xué)者將周易八卦和二進(jìn)制聯(lián)系起來。 到底是現(xiàn)代人強(qiáng)行解釋,還是老祖先確實(shí)有科學(xué)的智慧,這個(gè)我不敢探討。但是,有一點(diǎn)我確實(shí)很想說。那就是我們喜歡去解釋一切。千百年來,我們的文化并不喜歡去搞細(xì)密的研究,比如科學(xué)領(lǐng)域里那些數(shù)字公式什么的。我們更推崇一種思想上的“道”,或者說是一種“以不變應(yīng)萬變”的解釋。 如果你喜歡本文,就收藏和轉(zhuǎn)發(fā)吧,感謝支持。 |
|