二進制簡介
18世紀德國數理哲學大師萊布尼茲從他的傳教士朋友鮑威特寄給他的拉丁文譯本《易經》中,讀到了八卦的組成結構,驚奇地
發現其基本素數(0)(1),即《易經》的陰爻- -和__陽爻,其進位制就是二進制,并認為這是世界上數學進制中最先進的。
20世紀被稱作第三次科技革命的重要標志之一的計算機的發明與應用,其運算模式正是二進制。它不但證明了萊布尼茲的原理
是正確的,同時也證明了《易經》數理學是很了不起的。
[進制數] 1、二進制數據的表示法
二進制是計算技術中廣泛采用的一種數制。二進制數據是用0和1兩個數碼來表示的數。它的基數為2,進位規則是“逢二進一”
,借位規則是“借一當二”。二進制數據也是采用位置計數法,其位權是以2為底的冪。例如二進制數據110.11,其權的大小順序為
2^2、2^1、2^0、2^-1、2^-2。對于有n位整數,m位小數的二進制數據用加權系數展開式表示,可寫為:
(a(n-1)a(n-2)…a(-m))2=a(n-1)×2^(n-1)+a(n-2)×2^(n-2)+……+a(1)×2^1+a(0)×2^0+a(-1)×2^(-1)+a(-2)×2^(-2)+
……+a(-m)×2^(-m)
二進制數據一般可寫為:(a(n-1)a(n-2)…a(1)a(0).a(-1)a(-2)…a(-m))2。
注意:
1.式中aj表示第j位的系數,它為0和1中的某一個數。
2.a(n-1)中的(n-1)為下標,輸入法無法打出所以用括號括住,避免混淆。
3.2^2表示2的平方,以此類推。
【例1102】將二進制數據111.01寫成加權系數的形式。
解:(111.01)2=(1×2^2)+(1×2^1)+(1×2^0)+(0×2^-1)+(1×2^-2)
[二進制運算] 二進制數據的算術運算的基本規律和十進制數的運算十分相似。最常用的是加法運算和乘法運算。
1. 二進制加法
有四種情況: 0+0=0
0+1=1
1+0=1
1+1=10 進位為1
【例1103】求 (1101)2+(1011)2 的和
解:
1 1 0 1
+ 1 0 1 1
-------------------
1 1 0 0 0
2. 二進制乘法
有四種情況: 0×0=0
1×0=0
0×1=0
1×1=1
【例1104】求 (1110)2 乘(101)2 之積
解:
1 1 1 0
× 1 0 1
-----------------------
1 1 1 0
0 0 0 0
1 1 1 0
-------------------------
1 0 0 0 1 1 0
(這些計算就跟十進制的加或者乘法相同,只是進位的數不一樣而已,十進制的是到十才進位這里是到2就進了)
3.二進制減法
0-0=0,1-0=1,1-1=0,10-1=1。
4.二進制除法
0÷1=0,1÷1=1。[1][2]
[萊布尼茨的二進制] 在德國圖靈根著名的郭塔王宮圖書館(Schlossbiliothke zu Gotha)保存著一份彌足珍貴的手稿,其標題為:
“1與0,一切數字的神奇淵源。這是造物的秘密美妙的典范,因為,一切無非都來自上帝。”
這是德國天才大師萊布尼茨(Gottfried Wilhelm Leibniz,1646 - 1716)的手跡。但是,關于這個神奇美妙的數字系統,萊
布尼茨只有幾頁異常精煉的描述。用現代人熟悉的話,我們可以對二進制作如下的解釋:
2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64
2^7 = 128
以此類推。
把等號右邊的數字相加,就可以獲得任意一個自然數。我們只需要說明:采用了2的幾次方,而舍掉了2幾次方。二進制的表述
序列都從右邊開始,第一位是2的0次方,第二位是2的1次方,第三位時2的2次方……,以此類推。一切采用2的成方的位置,我們就
用“1”來標志,一切舍掉2的成方的位置,我們就用“0”來標志。這樣,我們就得到了下邊這個序列:
1 1 1 0 0 1 0 1
2的7次方
2的6次方
2的5次方
0
0
2的2次方
0
2的0次方
128
+
64
+
32
+
0
+
0
+
4
+
0
+
1
=
229
在這個例子中,十進制的數字“229”就可以表述為二進制的“11100101”。任何一個二進制數字最左邊的一位都是“1”。通
過這個方法,用1到9和0這十個數字表述的整個自然數列都可用0和1兩個數字來代替。0與1這兩個數字很容易被電子化:有電流就是
1;沒有電流就是0。這就是整個現代計算機技術的根本秘密所在。
[萊布尼茨和八卦]
這份手稿完成的時候,萊布尼茨五十歲。毫無疑問,他是這個作為現代計算機技術的基礎的二進制的發明者。而且,在此之前
,或者與他同時,似乎沒有一個人想到過這個問題。這在數學史上是很罕見的。
萊布尼茨不僅發明了二進制,而且賦予了它宗教的內涵。他在寫給當時在中國傳教的法國耶穌士會牧師布維(Joachim Bouvet
,1662 - 1732)的信中說:
“第一天的伊始是1,也就是上帝。第二天的伊始是2,……到了第七天,一切都有了。所以,這最后的一天也是最完美的。因
為,此時世間的一切都已經被創造出來了。因此它被寫作‘7’,也就是‘111’(二進制中的111等于十進制的7),而且不包含0。
只有當我們僅僅用0和1來表達這個數字時,才能理解,為什么第七天才最完美,為什么7是神圣的數字。特別值得注意的是它(第七
天)的特征(寫作二進制的111)與三位一體的關聯。”
布維是一位漢學大師,他對中國的介紹是17、18世紀歐洲學界中國熱最重要的原因之一。布維是萊布尼茨的好朋友,一直與他
保持著頻繁的書信往來。萊布尼茨曾將很多布維的文章翻譯成德文,發表刊行。恰恰是布維向萊布尼茨介紹了《周易》和八卦的系
統,并說明了《周易》在中國文化中的權威地位。
八卦是由八個符號組構成的占卜系統,而這些符號分為連續的與間斷的橫線兩種。這兩個后來被稱為“陰”、“陽”的符號,
在萊布尼茨眼中,就是他的二進制的中國翻版。他感到這個來自古老中國文化的符號系統與他的二進制之間的關系實在太明顯了,
因此斷言:二進制乃是具有世界普遍性的、最完美的邏輯語言。
另一個可能引起萊布尼茨對八卦的興趣的人是坦澤爾(Wilhelm Ernst Tentzel),他當時是圖靈根大公爵硬幣珍藏室的領導,
也是萊布尼茨的好友之一。在他主管的這個硬幣珍藏中有一枚印有八卦符號的硬幣。
[八卦與二進制] 今天,西方學界已經獲得了普遍的共識:八卦與二進制沒有直接的關系。首先,中國的數字系統是十進制的。其次,依照我們
今天掌握的史料,秦、漢以上,中國還沒有--在萊布尼茨的二進制意義上的--“零”的概念。
假如說《周易》中系辭的部分講的陰、陽化生萬物就是萊布尼茨所說的0、1為萬物之源,這是難以成立的。今本《周易》大概
可以分成三個部分,第一是卦,第二是爻,第三是傳,即所謂的“十翼”。其中,卦的部分應該是最古老的。從《尚書》、《周禮
》、《左傳》、《國語》等先秦文獻,以及后來的考古發掘,我們對西周初年的龜卜有了初步的認識。但是,對于“易卜”我們幾
乎沒有任何詳細可靠的資料。《周易》中的卦也許就是韓宣子所見到的“易象”。無論如何,我們在卦、爻中基本上看不到陰、陽
的影子。陰、陽的系統基本上是在《易傳》中得到完善的發展與表述的,盡管它的淵源一定早過《易傳》。而《易傳》顯然是十進
制的體系。通過《漢書·律歷志》的記載,我們不僅可以知道,在《周易》大行于世的時代歷算使用的是十進制,而且其中關鍵數
不是1,更不是0,而是2(陰、陽)和3(天、地、人)。(相見拙文《儒家對數學幾何的熱愛》)
另外,道哲學體系中的重要概念“無”與萊布尼茨的0沒有任何直接關系。羅素在《數理哲學道論》中將“0”解釋為:一切沒
有分子的類的類。這正是萊布尼茨心目中的“零”。而羅素的這個解釋正是受到了著名德國語言哲學家弗萊格(Gottlob Frege,
1848-1925)的著作Grundlage der Arithmetik(《算術基礎》)的啟發。弗萊格、羅素的數論體系中的“零”換成中國話說,就是
一切“無”的總稱。而道哲學中的“無”不是卻不是很多“無”的總和,而是那一個特定的“無”,是那一個“道”的本質。
簡單地說,萊布尼茨以來三百年間,西方的科學家與哲學家作過無數的研究,都不能發現二進制與八卦有什么實質性的聯系。
而在我們中國,秦漢以下,除去利用對八卦特殊的解釋建立哲學系統的努力,我們也基本上看不到對它具有說服力的解釋。
二進制轉化為十進制的方法:
第一位 第二位 第三位 第四位
2^0 2^1 2^2 2^3 ………………依此類推
做法: 例子:
1. 轉化二進制的11 為十進制的數:
用第一位的數字乘2^0 用第二位的數乘2^1
相加它們,具體步驟:
1*2^0+1*2^1=3
2.轉化二進制的1110為十進制的數:
用第一位的數字乘2^0 用第二位的數乘2^1
用第三位的數字乘2^2 用第四位的數乘2^3
相加他們,具體步驟:
0*2^0+1*2^1+1*2^2+1*2^3=14
注:1.任何數的零次方都是1,a^0=1
2.如果需要改n進制為十進制,只需要將上表變為:
第一位 第二位 第三位 第四位
n^0 n^1 n^2 n^3……………………依此類推
轉化方法跟二進制的一樣,a進制,第n位乘a^n-1
[計算機內部采用二進制的原因] (1)技術實現簡單,計算機是由邏輯電路組成,邏輯電路通常只有兩個狀態,開關的接通與斷開,這兩種狀態正好可以用“1
”和“0”表示。
(2)簡化運算規則:兩個二進制數和、積運算組合各有三種,運算規則簡單,有利于簡化計算機內部結構,提高運算速度。
(3)適合邏輯運算:邏輯代數是邏輯運算的理論依據,二進制只有兩個數碼,正好與邏輯代數中的“真”和“假”相吻合。
(4)易于進行轉換,二進制與十進制數易于互相轉換。
(5)用二進制表示數據具有抗干擾能力強,可靠性高等優點。因為每位數據只有高低兩個狀態,當受到一定程度的干擾時,仍
能可靠地分辨出它是高還是低。
[處理數據庫二進制數據] 我們在使用數據庫時,有時會用到圖像或其它一些二進制數據,這個時候你們就必須使用getchunk這個方法來從表中獲得二進制
大對象,我們也可以使用AppendChunk來把數據插入到表中.
我們平時來取數據是這樣用的!
Getdata=rs("fieldname")
而取二進制就得這樣
size=rs("fieldname").acturalsize
getdata=rs("fieldname").getchunk(size)
我們從上面看到,我們取二進制數據必須先得到它的大小,然后再搞定它,這個好像是ASP中處理二進制數據的常用方法,我們在獲
取從客戶端傳來的所有數據時,也是用的這種方法,嘿嘿大家可要記住O.
下面我們也來看看是怎樣將二進制數據加入數據庫
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就是我們取出的數據.
[二進制概述以及其發展] 進制是逢2進位的進位制,0、1是基本算符;計算機運算基礎采用二進制。電腦的基礎是二進制,那么,什么是二進制呢,為什
么需要二進制呢?在早期設計的機械計算裝置中,使用的不是二進制,而是十進制或者其他進制,利用齒輪的不同位置表示不同的數
值,這種計算裝置可能更加接近人類的思想方式。比如說一個計算設備有十個齒輪,它們級連起來,每一個齒輪有十格,小齒輪轉
一圈大齒輪走一格。這就是一個簡單的十位十進制的數據表示設備了,可以表示0到999999999的數字。 配合其他的一些機械設備,
這樣一個簡單的基于齒輪的裝置就可以實現簡單的十進制加減法了。這種通過不同的位置上面不同的符號表示數值的方法就是進制
表示方法。常用的進制主要是十進制(因為我們有十個手指,所以十進制是比較合理的選擇,用手指可以表示十個數字,0的概念直
到很久以后才出現,所以是1-10而不是0-9)。 電子計算機出現以后,使用電子管來表示十種狀態過于復雜,所以所有的電子計
算機中只有兩種基本的狀態,開和關。也就是說,電子管的兩種狀態決定了以電子管為基礎的電子計算機采用二進制來表示數字和
數據。 常用的進制還有8進制和16進制,在電腦科學中,經常會用到16進制,而十進制的使用非常少,這是因為16進制和二進制有
天然的聯系:4個二進制位可以表示從0到15的數字,這剛好是1個16進制位可以表示的數據,也就是說,將二進制轉換成16進制只要
每4位進行轉換就可以了。二進制的“00111000”直接可以轉換成16進制的“38”。 一個字是電腦中的基本存儲單元,根據計算機
字長的不同,字具有不同的位數,現代電腦的字長一般是32位的,也就是說,一個字的位數是32。字節是8位的數據單元,一個字節可
以表示0-255的數據。對于32位字長的現代電腦,一個字等于4個字節,對于早期的16位的電腦,一個字等于2個字節。
[二進制的算法] 2*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2......
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010......
四種常用的數制及它們之間的相互轉換:
進制
基數
基數個數
權
進數規律
十進制
0、1、2、3、4、5、6、7、8、9
10
10i
逢十進一
二進制
0、1
2
2i
逢二進一
八進制
0、1、2、3、4、5、6、7
8
8i
逢八進一
十六進制
0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
16
16i
逢十六進一
十進制數轉換為二進制數、八進制數、十六進制數的方法:
二進制數、八進制數、十六進制數轉換為十進制數的方法:按權展開求和法
1.二進制與十進制間的相互轉換:
(1)二進制轉十進制
方法:“按權展開求和”
例: (1011.01)2 =(1×2^3+0×2^2+1×2^1+1×2^0+0×2^(-1)+1×2^(-2) )10
=(8+0+2+1+0+0.25)10
=(11.25)10
規律:個位上的數字的次數是0,十位上的數字的次數是1,......,依獎遞增,而十
分位的數字的次數是-1,百分位上數字的次數是-2,......,依次遞減。
注意:不是任何一個十進制小數都能轉換成有限位的二進制數。
(2)十進制轉二進制
· 十進制整數轉二進制數:“除以2取余,逆序排列”(除二取余法)
例: (89)10 =(1011001)2
2 89
2 44 ……1
2 22 ……0
2 11 ……0
2 5 ……1
2 2 ……1
2 1 ……0
0 ……1
· 十進制小數轉二進制數:“乘以2取整,順序排列”(乘2取整法)
例: (0.625)10= (0.101)2
0.625X2=1.25 ……1
0.025X2=0.050 ……0
0.0050X2=0.010……1
2.八進制與二進制的轉換:
二進制數轉換成八進制數:從小數點開始,整數部分向左、小數部分向右,每3位為一組用一位八進制數的數字表示,不足3位
的要用“0”補足3位,就得到一個八進制數。
八進制數轉換成二進制數:把每一個八進制數轉換成3位的二進制數,就得到一個二進制數。
八進制數字與二進制數字對應關系如下:
000 -> 0 100 -> 4
001 -> 1 101 -> 5
010 -> 2 110 -> 6
011 -> 3 111 -> 7
例:將八進制的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.011)2 = (26.14)8
3.十六進制與二進制的轉換:
二進制數轉換成十六進制數:從小數點開始,整數部分向左、小數部分向右,每4位為一組用一位十六進制數的數字表示,不足
4位的要用“0”補足4位,就得到一個十六進制數。
十六進制數轉換成二進制數:把每一個八進制數轉換成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
[二進制的優點] 數字裝置簡單可靠,所用元件少;
只有兩個數碼0和1,因此它的每一位數都可用任何具有兩個不同穩定狀態的元件來表示;
基本運算規則簡單,運算操作方便。
[二進制的缺點] 用二進制表示一個數時,位數多;
例如:(49)D=(110001)B;
因此實際使用中多采用送入數字系統前用十進制,送入機器后再轉換成二進制數,讓數字系統進行運算,運算結束后再將二進
制轉換為十進制供人們閱讀;這就引出了十-二進制之間的轉換問題。