計算機編碼|二進位

2021-02-24 矽碼少兒編程

講計算機編碼,首先必須得講講二進位。二進位是什麼,計算機為什麼採用二進位,接下來我們就回答這兩個問題來聊一聊計算機中的二進位。

什麼是二進位,我們這樣來講。

我們知道古代的長城,兩個烽火臺是用點狼煙來通知敵人來了。但是假設現在他們不光要知道有敵人來,還想知道來了多少敵人,由此他們想了兩個方法:

1、點火,滅火;點火,滅火;……,如此點了多少次,就表示有多少個敵人來了;

2、有多少敵人,就同時點多少堆火。

可是不管這兩種方法中的哪一種,幾個敵人好說,如果幾十個,上百個,甚至上千個時,都有麻煩。用第一種方法,有可能點火滅火還沒通知完,敵人就攻上來了;第二種方法,這個烽火臺得要多大的地方才夠呀。

 

那怎麼辦呢?後來他們想了個辦法,把幾堆柴禾(柴堆足夠大,確保對方能夠看到)按順序一字排開後,每個位置的柴堆點火來表示不同的敵人數,假設如下方表格中的三堆柴禾,每堆柴禾的滅火狀態表示為0,點火狀態表示為1,他們進行了這樣的約定:

0

沒有火堆被點著,表示沒有敵人來

1

點第一堆火,表示有1個敵人來了

2

點第二堆火,表示有2個敵人來了

3

點第一堆和第二堆火,表示有3個敵人來了

4

點第三堆火,表示有4個敵人來了

5

點第三堆和第一堆火,表示有5個敵人來了

6

點第三堆和第二堆火,表示有6個敵人來了

7

把三堆火同時點著,表示有7個敵人來了

所以這樣一來,用三堆柴禾就可以最大表示出8個狀態,可以表達的最大敵人數為7,以此類推,4堆火可以表示出16個狀態,可以表達的最大敵人數為15。如下圖: 

0000

0


1000

8

0001

1


1001

9

0010

2


1010

10

0011

3


1011

11

0100

4


1100

12

0101

5


1101

13

0110

6


1110

14

0111

7


1111

15

再以此類推,5堆火,可以表示出32個狀態;6堆火,可以表示64個狀態了……。我們算下,如果有16堆火的時候,可以表示出幾個狀態呢?大家可能已經找到規律了:

3堆火,8個狀態:23 = 8

4堆火,16個狀態:24 = 16

5堆火,32個狀態:25 = 32

所以:

16堆火,總共可以有:216 =65536個狀態

也就是說如果我們一字排開16堆柴禾,如果 65535(65535=65536-1)個之內的敵人來的時候,我們都可以用這16堆柴禾給表達出來。

 

當然啦,如上方表格中,16個狀態的柴堆點火可不是隨機點的,兩個烽火臺,他們為了能快速知道多少敵人時點哪幾個柴堆,那麼一定需要有規律。我們來觀察一下上述表格:

狀態3 = 狀態2 + 狀態1

即: 11   =   10  +  01

 

狀態7 = 狀態6 + 狀態1 = 狀態5 + 狀態2

即: 111  =  110  +  001  =  101  +  010

 

而當狀態3 + 狀態1時,是否是狀態4呢?

所以當我們用0和1表示數據時,如果進位規則是逢二進一,那麼11+01 = 100,100即是狀態4。其實這就是二進位啦。由以上敘述可知,二進位數據即是指用0和1兩個符號來表示的數,且進位規則是逢二進一

 

(1)技術實現簡單:計算機是由邏輯電路組成,邏輯電路通常只有兩個狀態,電路的接通與斷開,這兩種狀態正好可以用「1」和「0」表示。

(2)運算規則簡易:兩個二進位數和、積運算組合各有四種,運算規則簡單,有利於簡化計算機運算器的硬體結構。假如採用十進位,十進位的九九乘法就有55條公式,而二進位的乘法就四條規則:0×0=0、1×0=0、0×1=0、1×1=1。

(3)適合邏輯運算:二進位的0和1正好和邏輯代碼假和真相對應,有邏輯代數的理論依據,用二進位表示真和假的二值邏輯很自然。

(4)易於進行轉換,二進位與十進位數易於互相轉換。這個轉換有興趣的朋友自行搜索啦,不再這裡細述了。

(5)用二進位表示數據具有抗幹擾能力強,可靠性高等優點。因為每位數據只有高低兩個狀態,或開關,或通斷,所以即使受到一定的幹擾時,仍能可靠地分辨出它是高是低,是開是關,是通是斷。

 

我們來假設一下,因某一個烽火臺比較小,它同時放不下16堆火,只能生1堆火,但是敵人數量又有可能達到上萬人,那怎麼傳遞信息呢?可能有人已經想到了,我們可以用1堆火,比如約定10秒鐘生滅一次,然後:

第一個10秒生滅了一次,表示為1;

第二個10秒沒有點火,一直是滅,表示為0;

……

以此類推,160秒內,以開始到最後分別哪幾個10秒內生火了,將這16個狀態依次記錄下來,我們就得到了一個16位的二進位數據了。

 

同時16堆火來表示一個數據的表示法,我們稱之為並行。而隔10秒生滅一次火的方式來表達數據,我們稱之為串行。由以上舉例我們可知,並行的數據表示方法顯然速度更快。

 

在計算機系統裡,表達數據寬度的最小單位是「位」,即故事中的「一堆火」,如果同時能生16堆火,則表示數據寬度是16位的。平時我們說計算機是64位的,即可以並行處理64位數據,可表達的最大數據為:

264 - 1 =18,446,744,073,709,551,615

 

64位數據,有時我們也會表達為8個字節,即8個位(bit)構成一個字節(byte):

1byte (字節)= 8 bit(位)

byte可簡寫為大寫的「B」,bit可簡寫為小寫的「b」。另外:

    1 KB (1千字節)= 210 B= 1024 B(字節)

    1 MB (1兆字節)= 210 KB= 1024 KB

    1 GB (1 G字節)= 210 MB= 1024 MB

    1 TB (1 T字節)= 210 GB= 1024 GB

由這組等式,大家可能已經知道了各類段子裡的1024出於何處了,沒錯,計算機系統中的「1千」是1024,而不是1000,就是因為其數據是二進位表達的緣故:

210= 1024,即10位寬度的二進位數據1 111 111 111。

通過上面的敘述我們已經知道計算機中的數據是怎麼表達的,這裡可能有人有疑問了,那計算機上的字符又是如何來表示的呢,或者有人可能會問什麼是字符?在接下來,我們會慢慢展開來講計算機中的各類字符表達,會先講鍵盤上的這些字符,靜待下篇:計算機編碼|ASCII編碼。

相關焦點

  • 計算機基礎——什麼是編碼?
    計算機基礎--什麼是編碼?作者名:麗斯什麼是編碼編碼是信息從一種形式或格式轉換為另一種形式的過程,簡單來講就是語言的翻譯過程。我們都知道計算機使用的是機器語言即二進位碼,相信大部分人都無法流暢的閱讀二進位碼,於是為了能夠讓人類更好的理解計算機輸出的結果就需要將機器語言轉換為自然語言,比如英語、俄語和中文等。 這看似簡單的語言轉換過程隨著計算機的普及與網際網路化對語言字符的編碼衝擊也越來越大,編碼規範的調整也伴隨著整個計算機發展歷史。
  • 四方語(4Case)特殊字符及其二進位編碼
    一、英文字母的四方字編碼大小寫英文字母本身就是非常便捷的符號,且普及度非常高,所以寫法不變(配圖選了有代表性的幾個字母,以說明字根的組合拆解方式)。英文字母二進位編碼的基本原則為:1、確保4個字根組合而成的字形儘量與字母相似。這樣設計的好處是,根據字母的形狀,能拆出二進位數字,從而得知字母的「四方字庫編號」。2、確保大寫字母的編號大於小寫字母,並且每個小寫字母都是從大寫字母變動1-2個字根而來。
  • 漫畫:「哈夫曼編碼」 是什麼鬼?
    計算機系統是如何存儲信息的呢?計算機不是人,它不認識中文和英文,更不認識圖片和視頻,它唯一「認識」的就是0(低電平)和1(高電平)。因此,我們在計算機上看到的一切文字、圖像、音頻、視頻,底層都是用二進位來存儲和傳輸的。
  • ASCII碼、Unicode編碼、UTF-8
    ASCII 碼在計算機內部,所有數據都使用二進位表示。
  • 吳國平:除了十進位, 人類文明史上還有哪些進位算法?
    當前的計算機系統使用的基本上是二進位系統,數據在計算機中主要是以補碼的形式存儲的。計算機中的二進位則是一個非常微小的開關,用「開」來表示1,「關」來表示0。20世紀被稱作第三次科技革命的重要標誌之一的計算機的發明與應用,因為數字計算機只能識別和處理由『0』.『1』符號串組成的代碼。其運算模式正是二進位。
  • 「程式設計師上下50年」計算機憑啥用二進位
    計算機憑啥用二進位不管是不是程式設計師,大家可能都知道二進位是個什麼東西。包括計算機在內,幾乎所有電子設備都採用的二進位。可是,為什麼會這樣呢?在說這個問題之前,先解決另一個問題——為什麼大多數國家的人類都採用十進位?因為,人類有十根手指。然後,沒了。
  • 現代二進位計算機,其原理到底是不是從八卦中引出的呢?
    計算機在赫爾曼手中首度接上了電,但電只是用來驅動繼電器進行計算,靠的是電磁鐵的機械動作,而不是電流本身。因此赫爾曼的自動制表機只能算是電力驅動的機械式計算機,仍然不是電子計算機。 計算機要蛻變為現代電腦,必須擺脫機械方式,改用電流本身來做計算。
  • 零基礎學Java之數據類型和運算符,第一講:進位及其轉換
    1.1 進位類型十進位:人類使用二進位:計算機使用八進位和十六進位:為了更好的表示二進位(縮短二進位長度)各進位數之間的關係二進位,是計算技術中廣泛採用的一種數制,由德國數理哲學大師萊布尼茨於1679年發明。二進位數據是用0和1兩個數碼來表示的數。它的基數為2,進位規則是「逢二進一」。數字計算機只能識別和處理由『0』.『1』符號串組成的代碼。其運算模式正是二進位。
  • 二進位、八進位、十六進位在現實當中有什麼意義?
    二進位二進位的出現是創歷史性的,在古代就有兩儀生四象,四象生八卦,八卦生萬物的說法,世間萬事萬物至少都有兩個狀態,比如生存/死亡、開/關、好/壞、高/低、大/小、長/短、胖/瘦等,這兩個狀態就可以使用二進位的0和1來表示。如今二進位主要運用於電子技術的數字電路當中,就比如計算機,最直接能夠識別的語言就是二進位語言。
  • 高中信息技術《文字及其處理技術-漢字的編碼》答辯
    1.計算機編碼的一般特徵有哪些?【參考答案】計算機編碼的一般特徵是採用二進位數據來編碼。由於電路的複雜性因素,電腦中都使用二進位數,只有0和1兩個數碼,逢二進一,最容易用電路來表達。將數據轉換為代碼或編碼字符,並能譯為原數據形式。是計算機書寫指令的過程,程序設計中的一部分。
  • python入門教程06-01(python語法入門之字符編碼)
    人在與計算機交流的時候,用的都是人類能讀懂的字符,如中文字符、英文字符、日文字符等毫無疑問,由人類的字符到計算機中的數字,必須經歷一個過程,計算機所識別出來的文字都是二進位的0011等等,所以此次課程講的是字符編碼的介紹和如何深刻認識字符編碼?
  • 計算機考試進位間轉換,能用計算器嗎?
    計算機考試不論是國考,還是專升本等考試,總會考幾分關於進位轉換的題目,那麼很多小夥伴不會算或者算不對怎麼辦?有小夥伴會問我能用計算器不。首先和大家講解一下電腦上的計算器進位轉化的設置及運用方法,這裡以win7系統為例:①先找到附近裡面的計算器
  • 計算機原理之整數表示(原碼/反碼/補碼)
    計算機首先得要能正確地存儲用戶數據,有了數據之後,計算機還要能夠按照用戶要求處理(運算)數據。今天痞子衡要講的就是數據(整數)在計算機中是怎麼存儲(表示)的。一、何謂進位  學過數字電路的朋友肯定知道數據的進位表示法,常見的有二進位、八進位、十進位、十六進位表示法。在現實生活中我們所用的數據表示法是十進位,即由0-9共10個數字表示所有數值。
  • scratch+程小奔機器人實現「進位轉換」(十進位轉二進位)
    也就說滿十進一;而在計算機的世界裡,基礎電路只有「開/關(通/斷)」(即0/1)兩種情況,這與誕生幾千年的二進位不謀而合;例如:二進位數字110,表達的就是十進位中的6;二進位數字1111,表達的就是十進位中的15。
  • 老司機這樣解讀編碼與調製
    而在計算機網絡中,對信源的資格並無特 殊限制,任何一個網絡中的計算機都可以成為信源,當然任何一個網絡中計算機也可以成為信宿  編碼與調製  由於傳輸介質及其格式的限制,通信雙方的信號不能直接進行傳送,必須通過一定的方式處理之後,使之能夠適合傳輸媒體特性,才能夠正確無誤地傳送到目的地。
  • 先聊算盤,再聊二進位
    當然二進位的乘除運算是如何進行的,則充滿了數學的奧秘與人類大腦精彩完美的推理。二進位是世界上第一臺計算機上用的算法,最古老的計算機裡有一個個燈泡,當運算的時候,比如要表達「一」,第一個燈泡會亮起來。要表達「二」,則第一個燈泡熄滅,第二個燈泡就會亮起來。二進位是計算技術中廣泛採用的一種數制。
  • 格雷碼編碼+解碼+實現(Python)
    >01 二值碼02 格雷碼編碼2.1 編碼優點2.2 編碼生成2.3 遞歸生成2.4 二值碼轉換2.5 編碼圖03 格雷碼投影3.1 投影圖案生成3.2 DLP投影圖像04 格雷碼解碼4.1 全局/局部灰度閾值法4.2 多幅圖像閾值法4.3 特殊情況05 參考文獻01
  • C/C+編程筆記:C語言進位詳解,二進位、八進位和十六進位!
    二進位 我們不妨將思維拓展一下,既然可以用 0~9 共十個數字來表示數值,那麼也可以用0、1兩個數字來表示數值,這就是二進位(Binary)。例如,數字 0、1、10、111、100、1000001 都是有效的二進位。
  • 蘇聯主義網原創:謠言終結者系列(三)——莫斯科國立大學三進位計算機發展史
    因為在一般情況下,我們對問題的看法不是只有「真」和「假」兩種答案,還有一種「不知道」。在三進位邏輯學中,符號「1」代表「真」;符號「-1」代表「假」;符號「0」代表「不知道」。顯然,這種邏輯表達方式更符合計算機在人工智慧方面的發展趨勢。它為計算機的模糊運算和自主學習提供了可能。只可惜,目前電子工程師對這種非二進位的研究大都停留在表面或形式上,沒有真正深入到實際應用中去。
  • 撥開字符編碼的迷霧
    ASCII使用7位二進位位來表示一個字符,總共可以表示128個字符(即2^7,二進位000 0000 ~ 111 1111 十進位0~127)。ASCII字符集中每個數字對應一個唯一的字符,如下表:因為其對應關係非常簡單,不需要特殊的編碼規則,所以嚴格來講ASCII不能算字符編碼,因為它沒有規定編碼規則。