二進制是計算技術中廣泛採用的一種數制。二進制數據是用0和1兩個數碼來表示的數。它的基數為2,進位規則是“逢二進一”,借位規則是“借一當二”,由18世紀德國數理哲學大師萊布尼茲發現。當前的計算機系統使用的基本上是二進制系統,數據在計算機中主要是以補碼的形式存儲的。計算機中的二進制則是一個非常微小的開關,用“開”來表示1,“關”來表示0。
20世紀被稱作第三次科技革命的重要標誌之一的計算機的發明與套用,因為數字計算機只能識別和處理由‘0’.‘1’符號串組成的代碼。其運算模式正是二進制。19世紀愛爾蘭邏輯學家喬治布爾對邏輯命題的思考過程轉化為對符號"0''.''1''的某種代數演算,二進制是逢2進位的進位制。0、1是基本算符。因為它只使用0、1兩個數字元號,非常簡單方便,易於用電子方式實現。
基本介紹
- 中文名:二進制
- 外文名:binary system
- 類別:算法
- 屬性:數學
表示法,運算,加法,乘法,減法,除法,拈加法,進制轉換,與十進制,與八進制,與十六進制,萊布尼茨,特點,優點,缺點,採用原因,處理數據,換算,
表示法
二進制數據的表示法
二進制數據一般可寫為:
【例1102】將二進制數據111.01寫成加權係數的形式。
解:
運算
加法
有四種情況: 0+0=0
0+1=1
1+0=1
1+1=10
0 進位為1
【例1103】求 1011(2)+11(2) 的和
解:
乘法
有四種情況: 0×0=0
1×0=0
0×1=0
1×1=1
減法
0-0=0,1-0=1,1-1=0,0-1=1。
除法
0÷1=0,1÷1=1。
拈加法
拈加法二進制是加減乘除外的一種特殊算法。
拈加法運算與進行加法類似,但不需要做進位。此算法在博弈論(Game Theory)中被廣泛利用
計算機中的十進制小數轉換二進制
計算機中的十進制小數用二進制通常是用乘二取整法來獲得的。
比如0.65換算成二進制就是:
0.65 × 2 = 1.3 取1,留下0.3繼續乘二取整
0.3 × 2 = 0.6 取0, 留下0.6繼續乘二取整
0.6 × 2 = 1.2 取1,留下0.2繼續乘二取整
0.2 × 2 = 0.4 取0, 留下0.4繼續乘二取整
0.4 × 2 = 0.8 取0, 留下0.8繼續乘二取整
0.8 × 2 = 1.6 取1, 留下0.6繼續乘二取整
0.6 × 2 = 1.2 取1,留下0.2繼續乘二取整
.......
一直循環,直到達到精度限制才停止(所以,計算機保存的小數一般會有誤差,所以在編程中,要想比較兩個小數是否相等,只能比較某個精度範圍內是否相等。)。這時,十進制的0.65,用二進制就可以表示為:0.1010011。
還值得一提的是,在計算機中,除了十進制是有符號的外,其他如二進制、八進制、16進制都是無符號的。
在現實生活和記數器中,如果表示數的“器件”只有兩種狀態,如電燈的“亮”與“滅”,開關的“開”與“關”。一種狀態表示數碼0,另一種狀態表示數碼1,1加1應該等於2,因為沒有數碼2,只能向上一個數位進一,就是採用“滿二進一”的原則,這和十進制是採用“滿十進一”原則完全相同。
1+1=10,10+1=11,11+1=100,100+1=101,
101+1=110,110+1=111,111+1=1000,……,
可見二進制的10表示二,100表示四,1000表示八,10000表示十六,……。
二進制同樣是“位值制”。同一個數碼1,在不同數位上表示的數值是不同的。如11111,從右往左數,第一位的1就是一,第二位的1表示二,第三位的1表示四,第四位的1表示八,第五位的1表示十六。
所謂二進制,也就是計算機運算時用的一種算法。二進制只由一和零組成。
比方說吧,你上一年級時一定聽說過“進位筒”(“數位筒”)吧!十進制是個位上滿十根小棒就捆成一捆,放進十位筒,十位筒滿十捆就捆成一大捆,放進百位筒……
二進制也是一樣的道理,個位筒上滿2根就向十位進一,十位上滿兩根就向百位進一,百位上滿兩根…… 二進制是世界上第一台計算機上用的算法,最古老的計算機里有一個個燈泡,當運算的時候,比如要表達“一”,第一個燈泡會亮起來。要表達“二”,則第一個燈泡熄滅,第二個燈泡就會亮起來。
二進制就是等於2時就要進位。
0=00000000
1=00000001
2=00000010
3=00000011
4=00000100
5=00000101
6=00000110
7=00000111
8=00001000
9=00001001
10=00001010
……
即是逢二進一,二進制廣泛用於最基礎的運算方式,計算機的運行計算基礎就是基於二進制來運行。只是用二進制執行運算,用其他進制表現出來。
進制轉換
與十進制
(1)二進制轉十進制
方法:“按權展開求和”
【例】:
規律:個位上的數字的次數是0,十位上的數字的次數是1,......,依次遞增,而十
分位的數字的次數是-1,百分位上數字的次數是-2,......,依次遞減。
注意:不是任何一個十進制小數都能轉換成有限位的二進制數。
(2)十進制轉二進制
· 十進制整數轉二進制數:“除以2取余,逆序排列”(除二取余法)
【例】:
89÷2 ……1
44÷2 ……0
22÷2 ……0
11÷2 ……1
5÷2 ……1
2÷2 ……0
1
· 十進制小數轉二進制數:“乘以2取整,順序排列”(乘2取整法)
【例】: (0.625)10= (0.101)2
0.625X2=1.25 ……1
0.25 X2=0.50 ……0
0.50 X2=1.00 ……1
十進制1至128的二進制表示:
0=0
1=1
2=10
3=11
4=100
5=101
6=110
7=111
8=1000
9=1001
10=1010
11=1011
12=1100
13=1101
14=1110
15=1111
16=10000
17=10001
18=10010
19=10011
20=10100
21=10101
22=10110
23=10111
24=11000
25=11001
26=11010
27=11011
28=11100
29=11101
30=11110
31=11111
32=100000
33=100001
34=100010
35=100011
36=100100
37=100101
38=100110
39=100111
40=101000
41=101001
42=101010
43=101011
44=101100
45=101101
46=101110
47=101111
48=110000
49=110001
50=110010
51=110011
52=110100
53=110101
54=110110
55=110111
56=111000
57=111001
58=111010
59=111011
60=111100
61=111101
62=111110
63=111111
64=1000000
65=1000001
66=1000010
67=1000011
68=1000100
69=1000101
70=1000110
71=1000111
72=1001000
73=1001001
74=1001010
75=1001011
76=1001100
77=1001101
78=1001110
79=1001111
80=1010000
81=1010001
82=1010010
83=1010011
84=1010100
85=1010101
86=1010110
87=1010111
88=1011000
89=1011001
90=1011010
91=1011011
92=1011100
93=1011101
94=1011110
95=1011111
96=1100000
97=1100001
98=1100010
99=1100011
100=1100100
101=1100101
102=1100110
103=1100111
104=1101000
105=1101001
106=1101010
107=1101011
108=1101100
109=1101101
110=1101110
111=1101111
112=1110000
113=1110001
114=1110010
115=1110011
116=1110100
117=1110101
118=1110110
119=1110111
120=1111000
121=1111001
122=1111010
123=1111011
124=1111100
125=1111101
126=1111110
127=1111111
128=10000000
.十進制負數轉二進制:“先取正數的二進制值,再取反,加1”
【例】:(-31)10 = (1)2
31的二進制數為11111,取反00000,加1得1。
與八進制
二進制數轉換成八進制數:從小數點開始,整數部分向左、小數部分向右,每3位為一組用一位八進制數的數字表示,不足3位的要用“0”補足3位,就得到一個八進制數。
八進制數轉換成二進制數:把每一個八進制數轉換成3位的二進制數,就得到一個二進制數。
八進制數字與十進制數字對應關係如下:
000 -> 0 | 004-> 4 | 010=8
001 -> 1 |005 -> 5| 011=9
002 -> 2 |006 -> 6 | 012=10
003 -> 3 |007 -> 7 | 013=11
【例】:將八進制的37.416轉換成二進制數:
3 7 . 4 1 6
011 111 .100 001 110
即:(37.416)8 =(11111.10000111)2
【例】:將二進制的10110.0011 轉換成八進制:
0 1 0 1 1 0 . 0 0 1 1 0 0
2 6 . 1 4
即:(10110.0011)2 = (26.14)8
與十六進制
二進制數轉換成十六進制數:二進制數轉換成十六進制數時,只要從小數點位置開始,向左或向右每四位二進制劃分一組(不足四位數可補0),然後寫出每一組二進制數所對應的十六進制數碼即可。
十六進制數轉換成二進制數:把每一個十六進制數轉換成4位的二進制數,就得到一個二進制數。
十六進制數字與二進制數字的對應關係如下:
0000 -> 0 0100 -> 4 1000 -> 8 1100 -> C
0001 -> 1 0101 -> 5 1001 -> 9 1101 -> D
0010 -> 2 0110 -> 6 1010 -> A 1110 -> E
0011 -> 3 0111 -> 7 1011 -> B 1111 -> F
【例】:將十六進制數5DF.9 轉換成二進制:
5 D F . 9
0101 1101 1111 .1001
即:(5DF.9)16 =(10111011111.1001)2{十六進制怎么會有小數點}
【例】:將二進制數1100001.111 轉換成十六進制:
0110 0001 . 1110
6 1 . E
即:(1100001.111)2 =(61.E)16
與十進制的區別
二進制與十進制的區別在於數碼的個數和進位規律有很大的區別,顧名思義,二進制的計數規律為逢二進一,是以2為基數的計數體制。10這個數在二進制和十進制中所表示的意義完全不同,在十進制中就是我們通常所說的十,在二進制中,其中的一個意義可能是表示一個大小等價於十進制數2的數值。
仿照例題1.3.1,我們可以將二進制數10表示為:10=1×2^1+0×2^0
一般地,任意二進制數可表示為:
例題 1.3.2 試將二進制數(01010110)B轉換為十進制數。
解:將每一位二進制數乘以位權後相加便得相應的十進制數
在數字電子技術和計算機套用中,二值數據常用數字波形來表示
。使用數字波形可以使得數據比較直觀,也便於使用電子示波器進行監視。圖1.3.3表示一計數器的波形。
圖1.3.3 用二進制數表示0~15波形圖
圖中給出了四個二進制波形。看這種二進制波形圖時,我們應當沿著圖中虛線所示的方向來看,即使圖中沒有標出虛線(一般都沒有標出),也要想像出虛線來。其中在每一個波形上方的數字表示了與波形對應的位的數值,最後一行則是相應的十進制數 ,其中LSB是英文Least Significant Bit的縮寫,表示最低位,MSB是Most Significant Bit的縮寫,表示二進制數的最高位。顯然,這是一組4位的二進制數,總共有16組,最左邊的二進制數為0000,最上邊的波形代表二進制數的最低位,也就是通常在十進制數中我們所說的個位數,最下面的是最高位。圖中最右邊的二進制數為1111,對應的十進制數為15。再來看看對應於十進制數5的二進制數是多少呢?是0101,對了,讀數的順序是從下往上。
二進制數在數字系統(比如計算機之間)中的傳輸的方式分為串列和並行兩種。
其中串列傳輸時二進制數是按照逐位傳遞的方式進行傳輸,根據實際情況可以從最高位或最低位開始傳輸,一般情況下是從最高位開始傳輸的。只需要一根數據線。如圖1.3.4所示,要完成八位二進制數的傳輸,需要經歷八個時鐘周期。
圖1.3.4 二進制數據的串列傳輸
(a) 兩台計算機之間的串列通信 (b) 二進制數據的串列表示
典型的例子是數據機與計算機之間的通信就是通過串列傳輸來完成的。
並行傳輸的效率要高於串列傳輸,一次可以傳輸完整的一組二進制數。但是根據所要傳輸的二進制數的位數的多少,需要備足足夠多的數據線。一般來說,常見的並行傳輸採用的數據線有8、16、32等,再多就很少見了。典型的並行傳輸例子是印表機與計算機之間的通信傳輸,見圖1.3.5。
圖1.3.5 並行傳輸數據的示意圖
(a) 計算機與印表機之間的並行通信 (b) 二進制數據的並行表示
圖1.3.5顯示了採用並行傳輸模式,只需要一個時鐘周期,即可完成八位二進制數的傳輸。
萊布尼茨
在德國圖靈根著名的郭塔王宮圖書館(Schlossbiliothke zu Gotha)保存著一份彌足珍貴的手稿,其標題為:“1與0,一切數字的神奇淵源。這是造物的秘密美妙的典範,因為,一切無非都來自上帝。”這是德國天才大師萊布尼茨(Gottfried Wilhelm Leibniz,1646 - 1716)的手跡。但是,關於這個神奇美妙的數字系統,萊布尼茨只有幾頁異常精煉的描述。
萊布尼茨不僅發明了二進制,而且賦予了它宗教的內涵。他在寫給當時在中國傳教的法國耶穌士會牧師布維(Joachim Bouvet,1662 - 1732)的信中說:“第一天的伊始是1,也就是上帝。第二天的伊始是2,……到了第七天,一切都有了。所以,這最後的一天也是最完美的。因為,此時世間的一切都已經被創造出來了。因此它被寫作‘7’,也就是‘111’(二進制中的111等於十進制的7),而且不包含0。只有當我們僅僅用0和1來表達這個數字時,才能理解,為什麼第七天才最完美,為什麼7是神聖的數字。特別值得注意的是它(第七天)的特徵(寫作二進制的111)與三位一體的關聯。”
布維是一位漢學大師,他對中國的介紹是17、18世紀歐洲學界中國熱最重要的原因之一。布維是萊布尼茨的好朋友,一直與他保持著頻繁的書信往來。萊布尼茨曾將很多布維的文章翻譯成德文,發表刊行。恰恰是布維向萊布尼茨介紹了《周易》和八卦的系統,並說明了《周易》在中國文化中的權威地位。
八卦是由八個符號組構成的占卜系統,而這些符號分為連續的與間斷的橫線兩種。這兩個後來被稱為“陰”、“陽”的符號,在萊布尼茨眼中,就是他的二進制的中國翻版,但實際萊布尼茨是受中國陰陽太極影響,只不過他付出了諸多研究,推演出二進制。他感到這個來自古老中國文化的符號系統與他的二進制之間的關係實在太明顯了,因此斷言:二進制乃是具有世界普遍性的、最完美的邏輯語言。
另一個可能引起萊布尼茨對八卦的興趣的人是坦澤爾(Wilhelm Ernst Tentzel),他當時是圖靈根大公爵硬幣珍藏室的領導,也是萊布尼茨的好友之一。在他主管的這個硬幣珍藏中有一枚印有八卦符號的硬幣。
與中國易經聯繫
1679年3月15日戈特弗里德·威廉·萊布尼茨發明了一種計算法,用兩位數代替原來的十位數,即1 和 0。 1701年他寫信給在北京的神父 Grimaldi(中文名字閔明我)和 Bouvet(中文名字白晉)告知自己的新發明,希望能引起他心目中的“算術愛好者”康熙皇帝的興趣。
白晉很驚訝,因為他發現這種“二進制的算術”與中國古代的一種建立在兩個符號基礎上的符號系統是非常近似的,這兩個符號分別由一條直線和兩條短線組成,即── 和 — —。這是中國最著名大概也是最古老的書《易經》的基本組成部分,據今人推測,該書大約產生於公元前第一個千年的初期,開始主要是一部占卜用書,裡邊的兩個符號可能分別代表“是”和“不”。萊布尼茨對這個相似也很吃驚,和他的筆友白晉一樣,他也深信《易經》在數學上的意義。他相信古代的中國人已經掌握了二進制並在科學方面遠遠超過當代的中國人。
這一次將數學與古代中國《易經》相聯的嘗試是不符合實際的。萊布尼茨的二進制數學指向的不是古代中國,而是未來。萊布尼茨在1679年3月15日記錄下他的二進制體系的同時,還設計了一台可以完成數碼計算的機器。我們今天的現代科技將此構想變為現實,這在萊布尼茨的時代是超乎人的想像能力的。
特點
優點
數字裝置簡單可靠,所用元件少;
只有兩個數碼0和1,因此它的每一位數都可用任何具有兩個不同穩定狀態的元件來表示;
基本運算規則簡單,運算操作方便。
缺點
用二進制表示一個數時,位數多。因此實際使用中多採用送入數字系統前用十進制,送入機器後再轉換成二進制數,讓數字系統進行運算,運算結束後再將二進制轉換為十進制供人們閱讀。
我們也一樣,只要學完這一小節,就能做到。
首先我們來看一個二進制數:1111,它是多少呢?
你可能還要這樣計算:1 × 2º + 1 × 21 + 1 × 22 + 1 × 23 = 1 × 1 + 1 × 2 + 1 × 4 + 1 × 8 = 15。
然而,由於1111才4位,所以我們必須直接記住它每一位的權值,並且是從高位往低位記,:8、4、2、1。即,最高位的權值為23 = 8,然後依次是 22 = 4,21=2, 2º = 1。
記住8421,對於任意一個4位的二進制數,我們都可以很快算出它對應的10進制值。
下面列出四位二進制數 xxxx 所有可能的值(中間略過部分)
僅4位的2進制數快速計算方法 十進制值 十六進值
1111 = 8 + 4 + 2 + 1 = 15 F
1110 = 8 + 4 + 2 + 0 = 14 E
1101 = 8 + 4 + 0 + 1 = 13 D
1100 = 8 + 4 + 0 + 0 = 12 C
1011 = 8 + 0 + 2+ 1 = 11 B
1010 = 8 + 0 + 2 + 0 = 10 A
1001 = 8 + 0 + 0 + 1 = 9
....
0001 = 0 + 0 + 0 + 1 = 1
0000 = 0 + 0 + 0 + 0 = 0 0
二進制數要轉換為十六進制,就是以4位一段,分別轉換為十六進制。
如(上行為二制數,下面為對應的十六進制):
1111 1101 , 1010 0101 , 1001 1011
F D , A 5 , 9 B
反過來,當我們看到 FD時,如何迅速將它轉換為二進制數呢?
先轉換F:
看到F,我們需知道它是15(可能你還不熟悉A~F這六個數),然後15如何用8421湊呢?應該是8 + 4 + 2 + 1,所以四位全為1 :1111。
接著轉換 D:
看到D,知道它是13,13如何用8421湊呢?應該是:8 + 4 + 1,即:1101。
所以,FD轉換為二進制數,為: 1111 1101
比如,十進制數 1234轉換成二制數,如果要一直除以2,直接得到2進制數,需要計算較多次數。所以我們可以先除以16,得到16進制數:
被除數 計算過程 商 餘數
1234 1234/16 77 2
77 77/16 4 13 (D)
4 4/16 0 4
結果16進制為: 0x4D2
同樣,如果一個二進制數很長,我們需要將它轉換成10進制數時,除了前面學過的方法是,我們還可以先將這個二進制轉換成16進制,然後再轉換為10進制。
採用原因
(1)技術實現簡單,計算機是由邏輯電路組成,邏輯電路通常只有兩個狀態,開關的接通與斷開,這兩種狀態正好可以用“1”和“0”表示。
(2)簡化運算規則:兩個二進制數和、積運算組合各有三種,運算規則簡單,有利於簡化計算機內部結構,提高運算速度。
(3)適合邏輯運算:邏輯代數是邏輯運算的理論依據,二進制只有兩個數碼,正好與邏輯代數中的“真”和“假”相吻合。
(4)易於進行轉換,二進制與十進制數易於互相轉換。
(5)用二進制表示數據具有抗干擾能力強,可靠性高等優點。因為每位數據只有高低兩個狀態,當受到一定程度的干擾時,仍能可靠地分辨出它是高還是低。
二進制是一種非常古老的進位制,它來自於中國先聖的天文觀測,所以可以說數學是天文學的一個分支。萊布尼 茲通過在中國的傳教士,得到了八卦圖,他領悟到只要把八卦中的陰爻代表0,陽爻代表1, 就可以創立一種新的記數法:二進制。西方人沒有自然的科學思想,因此所謂現代科技只是對中國自然科學思想的結構和符號化表,宋明兩代中國的大量學術成果和技術傳入西方,才促進了西方文明的發展。所以從根上講,中國的自然科學思想才是所謂現代科學的根。
處理數據
我們在使用資料庫時,有時會用到圖像或其它一些二進制數據,這個時候你們就必須使用getchunk這個方法來從表中獲得二進制大對象,我們也可以使用AppendChunk來把數據插入到表中.
我們平時來取數據是這樣用的!
Getdata=rs("fieldname")
而取二進制就得這樣
size=rs("fieldname").acturalsize
getdata=rs("fieldname").getchunk(size)
我們從上面看到,我們取二進制數據必須先得到它的大小,然後再搞定它,這個好像是ASP中處理二進制數據的常用方法,我們在獲取從客戶端傳來的所有數據時,也是用的這種方法。
下面我們也來看看是怎樣將二進制數據加入資料庫
rs("fieldname").appendchunk binarydata
一步搞定!
另外,使用getchunk和appendchunk將數據一步一步的取出來!
下面演示一個取數據的例子!
Addsize=2
totalsize=rs("fieldname").acturalsize
offsize=0
Do Where offsize Binarydata=rs("fieldname").getchunk(offsize)
data=data&Binarydata
offsize=offsize+addsize
Loop
當這個程式運行完畢時,data就是我們取出的數據.
換算
從小數點開始3位(不足3位補0)二進制數得到1位八進制數
(用B代表二進制,用O代表八進制):000B=0O、001B=1O、010B=2O、011B=3O、100B=4O、101B=5O、110B=6O。
二進制與十進制的“1248"換算法:例
十進制 | 16 | 8 | 4 | 2 | 1 |
二進制 | 1 | 0 | 1 | 0 | 1 |
即16+4+1=21
簡單來說,就是把二進制數代入表格內,十進制數不變,只要把有十進制中對應1的數加起來就可以得出結果。