二進位碼
只採用兩種不同字元的代碼
在數學和數字電路中,二進位(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)出現。與二進位數相關的系統在一些更早的文化中也有出現,包括古埃及、古代中國和古印度。中國的《易經》尤其引起了萊布尼茨的聯想。
印度學者平甲拉(公元前兩世紀左右) 通過二進位方法來研究韻律詩。他的二進位中用到的是長短音節(一個長音節相當於兩個短音節),有些像摩爾斯電碼。與西方的位置表示法不同,平甲拉的系統中,二進位是從右往左書寫的。
1605年,弗朗西斯·培根提出了一套系統,可以把26個字母化為二進位數。此外他補充道,這個思路可以用於任何事物:“只要這些事物的差異是簡單對立的,比如鈴鐺和喇叭,燈光和手電筒,以及火槍和類似武器的射擊聲”。這對二進位編碼的一般理論有重要意義。(參見培根密碼)
萊布尼茨和《易經》
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
數表[編輯]
十進位 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
---|---|---|---|---|---|---|---|---|---|---|---|
二進位 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 | 1001 | 1010 | |
十進位 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
二進位 | 1011 | 1100 | 1101 | 1110 | 1111 | 10000 | 10001 | 10010 | 10011 | 10100 | 10101 |
十進位 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
二進位 | 10110 | 10111 | 11000 | 11001 | 11010 | 11011 | 11100 | 11101 | 11110 | 11111 | 100000 |
把二進位化為八進位也很容易,因為八進位以8為基數,8是2的冪(8=2),因此八進位的一位恰好需要三個二進位位來表示。八進位與二進位數之間的對應就是上面表格中十六進位的前八個數。二進位數000就是八進位數0,二進位數111就是八進位數7,以此類推。
八進位 | 二進位 |
---|---|
000 | |
1 | 001 |
2 | 010 |
3 | 011 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
八進位轉為二進位:
● 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}。