二進位碼

只採用兩種不同字元的代碼

在數學和數字電路中,二進位(binary)數是指用二進位記數系統,即以2為基數的記數系統表示的數字。這一系統中,數通常用兩個不同的符號0(代表零)和1(代表一)來表示。以2為基數代表系統是二進位制的。數字電子電路中,邏輯門的實現直接應用了二進位,因此現代的計算機和依賴計算機的設備里都用到二進位。每個數字稱為一個比特(二進位位)。

相關歷史


現代的二進位記數系統由戈特弗里德·萊布尼茨於1679年設計,在他1703年發表的文章《論只使用符號0和1的二進位算術,兼論其用途及它賦予伏羲所使用的古老圖形的意義》(法語:Explication de l'arithmétique binaire, qui se sert des seuls caractères 0 et 1 avec des remarques sur son utilité et sur ce qu'elle donne le sens des anciennes figures chinoises de Fohy)出現。與二進位數相關的系統在一些更早的文化中也有出現,包括古埃及、古代中國和古印度。中國的《易經》尤其引起了萊布尼茨的聯想。

埃及

古埃及的計數員使用兩種不同的系統表示分數,一是埃及分數(與二進位記數系統無關),二是荷魯斯之眼分數(叫這個名字是因為很多數學史家相信這個系統所採用的符號可以排列成荷魯斯之眼,但這一點有爭議)。荷魯斯之眼分數是用來表示分數數量的穀物、液體等的二進位記數系統,在這一系統下,以赫卡特為單位的分數值表示成1/2、1/4、1/8、1/16、1/32和1/64等二進位分數的和。這一系統的早期形式可以在埃及第五王朝(約公元前2400年)的檔案中找到,而發展完備的象形文字形式可追溯到埃及第十九王朝(約公元前1200年)。古埃及做乘法的方式也與二進位數密切相關,約公元前1650年的萊因德數學紙草書中就能看到。這一計算方法中,要把1和乘數不斷翻倍,按被乘數的二進位表示從左列選出相應的2的冪次,並將右列的數相加。

中國

《易經》的歷史可以追溯到公元前9世紀,其中的二進位記號是用來解釋其四進位占卜技術的。它基於道的陰陽二重性。八卦和一種64卦早在古代中國的周朝就被使用了,而它們分別與三位與六位二進位數字類似。北宋學者邵雍用一種與現代二進位數字類似的形式重新排列了卦象,不過並不是為了數學應用。在邵雍方陣中,把實線看作1、斷線看作0,從右下到左上瀏覽,那麼卦象實際上就是0到63的二進位。

印度

印度學者平甲拉(公元前兩世紀左右) 通過二進位方法來研究韻律詩。他的二進位中用到的是長短音節(一個長音節相當於兩個短音節),有些像摩爾斯電碼。與西方的位置表示法不同,平甲拉的系統中,二進位是從右往左書寫的。

萊布尼茨前的西方先驅

1605年,弗朗西斯·培根提出了一套系統,可以把26個字母化為二進位數。此外他補充道,這個思路可以用於任何事物:“只要這些事物的差異是簡單對立的,比如鈴鐺和喇叭,燈光和手電筒,以及火槍和類似武器的射擊聲”。這對二進位編碼的一般理論有重要意義。(參見培根密碼)
萊布尼茨和《易經》
萊布尼茨關於二進位的論文全名是《論只使用符號0和1的二進位算術,兼論其用途及它賦予伏羲所使用的古老圖形的意義》(1703年)。類似於現代二進位計數系統,萊布尼茲的系統使用0和1。

後來的發展

1854年,英國數學家喬治·布爾發表了一篇里程碑式的論文,其中詳細介紹了一種代數化的邏輯系統,後人稱之為布爾代數。他提出的邏輯演算在後來的電子電路設計中起基礎性作用。
1937年,克勞德·香農在麻省理工大學完成了其電氣工程碩士學位論文,用繼電器和開關實現了布爾代數和二進位算術運算。論文題為《繼電器與開關電路的符號分析》(A Symbolic Analysis of Relay and Switching Circuits),其中香農的理論奠定了數字電路的理論基礎。香農憑這篇論文於1940年被授予美國阿爾弗雷德·諾貝爾協會美國工程師獎。哈佛大學的哈沃德·加德納稱,香農的碩士論文“可能是本世紀最重要、最著名的碩士學位論文”。
1937年11月,任職于貝爾實驗室的喬治·斯蒂比茲發明了用繼電器表示二進位的裝置。它是第一台二進位電子計算機。

進位轉換


十進數轉成二進數

整數部分,把十進位轉成二進位一直分解至商數為0。讀餘數從下讀到上,即是二進位的整數部分數字。小數部分,則用其乘2,取其整數部分的結果,再用計算后的小數部分依此重複計算,算到小數部分全為0為止,之後讀所有計算后整數部分的數字,從上讀到下。
將59.25(10)轉成二進位:
整數部分:
59 ÷ 2 = 29 ... 1
29 ÷ 2 = 14 ... 1
14 ÷ 2 = 7 ... 0
7 ÷ 2 = 3 ... 1
3 ÷ 2 = 1 ... 1
1 ÷ 2 = 0 ... 1
小數部分:
0.25×2=0.5
0.50×2=1.0
59.25(10)=111011.01(2)
也可以公式來計算
59.25(10) = 101*10101+1001*10100+10*1010-1+101*1010-10
= 101*1010+1001+10/1010+101/1010/1010
= 110010+1001+(10+0.1)/1010
= 111011+0.01
= 111011.01

二進數轉成十進數

將1001012轉換為十進位形式如下:
● 1001012= [ (1) × 2] + [ () × 2] + [ () × 2] + [ (1) × 2] + [ () × 2 ] + [ (1) × 1 ]
● 1001012= [1× 32 ] + [× 16 ] + [× 8 ] + [1× 4 ] + [× 2 ] + [1× 1 ]
● 1001012= 3710
數表[編輯]
十進位12345678910
二進位11011100101110111100010011010
十進位1112131415161718192021
二進位10111100110111101111100001000110010100111010010101
十進位2223242526272829303132
二進位10110101111100011001110101101111100111011111011111100000

二進位化為八進位

把二進位化為八進位也很容易,因為八進位以8為基數,8是2的冪(8=2),因此八進位的一位恰好需要三個二進位位來表示。八進位與二進位數之間的對應就是上面表格中十六進位的前八個數。二進位數000就是八進位數0,二進位數111就是八進位數7,以此類推。
八進位二進位
000
1001
2010
3011
4100
5101
6110
7111
八進位轉為二進位:
● 658= 110 1012
● 178= 001 1112
二進位轉八進位:
● 1011002= 101 1002(三位一組) = 548
● 100112= 010 0112(用零填充 (密碼學),三位一組) = 238
八進位轉十進位:
● 658= (6 × 8) + (5 × 8) = (6 × 8) + (5 × 1) = 5310
● 1278= (1 × 8) + (2 × 8) + (7 × 8) = (1 × 64) + (2 × 8) + (7 × 1) = 8710

相關應用


二進位的應用非常廣泛,可以應用於各個方面,比如計算機科學,物理學等。

二進位的集合運算

已知集合A,求A的冪集。
由於集合子集中的元素與子集下標中二進位位的“l”相對應,因此求子集中元素的運算可以轉化為尋找子集下標二進位位中“l”所在位置的運算,此運算可以利用移位操作來實現。
例如,求101所對應的A的子集,我們可以通過3次移位,每次先將當前的數值與數值1相與,如果結果等於1,則本次第0位上的值為l,否則為0,由移位的次數可以知道當前第0位的l在原數據中的位置,從而找到對應的實際元素。運算如下:
①第0次與:lOl&001=1,a對應二進位位的第0位,而且本次相與的結果為1,所以a屬於此子集:101右移一位,現在的數值為010
②第1次與:010&001=0,b對應二進位位的第l位,而且本次相與的結果為0,所以b不屬於此子集。OlO右移一位,現在的數值為001③第1次與:001&001=l,C對應二進位位的第2位,而且本次相與的結果為1,所以C屬F此子集。001右移一位,現在的數值為000。
計算完畢。求出101對應的A的子集為{a,c}。