二進制(binary),是在數(shù)學和數(shù)字電路中以2為基數(shù)的記數(shù)系統(tǒng),是以2為基數(shù)代表系統(tǒng)的二進位制。這一系統(tǒng)中,通常用兩個不同的符號0(代表零)和1(代表一)來表示。發(fā)現(xiàn)者是萊布尼茨。數(shù)字電子電路中,邏輯門的實現(xiàn)直接應用了二進制,現(xiàn)代的計算機和依賴計算機的設備里都使用二進制。每個數(shù)字稱為一個比特(Bit,Binary digit的縮寫)。
數(shù)字電路中只有兩種電平特性,即高電平和低電平,這也就決定了數(shù)字電路中使用二進制。十進制數(shù)大家應該都不陌生,“逢十進一,借一當十”是十進制數(shù)的特點。有了十進制數(shù)的基礎,我們學習二進制數(shù)便非常容易了,“逢二進一,借一當二”便是二進制數(shù)的特點。
十進制轉換為二進制
一個十進制數(shù)轉換為二進制數(shù)要分整數(shù)部分和小數(shù)部分分別轉換,最后再組合到一起。
整數(shù)部分采用"除2取余,逆序排列"法。具體做法是:用2整除十進制整數(shù),可以得到一個商和余數(shù);再用2去除商,又會得到一個商和余數(shù),如此進行,直到商為小于1時為止,然后把先得到的余數(shù)作為二進制數(shù)的低位有效位,后得到的余數(shù)作為二進制數(shù)的高位有效位,依次排列起來。
十進制數(shù)1轉換為二進制數(shù)是1B(這里B是表示二進制數(shù)的后綴);十進制數(shù)2轉換為二進制數(shù)時,因為已經到2,所以需要進1,那么二進制數(shù)即為10B;十進制數(shù)5轉換為二進制數(shù),2為10B,那么3即為10B+1B=11B,4即為11B+1B=100B,5即為100B+1B=101B。依次類推,當十進制數(shù)為254時,對應二進制數(shù)為11111110B
我們可找出一般規(guī)律,當二進制數(shù)轉換成十進制數(shù)時,從二進制數(shù)的最后一位起往前看,每一位代表的數(shù)為2的n次幕,這里的n表示從最后起的第幾位二進制數(shù),n從0算起,若對應該二進制數(shù)位上有1,那么就表示有值,為0即無值。例如,再把二進制數(shù)11111110B反推回十進制數(shù),計算過程如下:
其中2"稱為“位權”。對于十進制數(shù)與二進制數(shù)之間的轉換,我們能夠熟練掌握0?15以內的數(shù)就夠用了,為了方便記憶,我們歸納如表1.4.1所示。
表1.4.1十進制數(shù)和二進制數(shù)之間的轉換表
我們在進行單片機編程時常常會用到其他較大的數(shù),這時我們用Windows系統(tǒng)自帶的計算器,可以非常方便地進行二進制、八進制、十進制、十六進制數(shù)之間的任意轉換,如圖1.4.1所示。
圖141 Windows自帶的計算器
計算機采用二進制原因
首先,二進位計數(shù)制僅用兩個數(shù)碼。0和1,所以,任何具有二個不同穩(wěn)定狀態(tài)的元件都可用來表示數(shù)的某一位。而在實際上具有兩種明顯穩(wěn)定狀態(tài)的元件很多。例如,氖燈的“亮”和“熄”;開關的“開”和“關”;電壓的“高”和“低”、“正”和“負”;紙帶上的“有孔”和“無孔”;電路中的“有信號”和“無信號”;磁性材料的南極和北極等等,不勝枚舉。利用這些截然不同的狀態(tài)來代表數(shù)字,是很容易實現(xiàn)的。不僅如此,更重要的是兩種截然不同的狀態(tài)不單有量上的差別,而且是有質上的不同。這樣就能大大提高機器的抗干擾能力,提高可靠性。而要找出一個能表示多于二種狀態(tài)而且簡單可靠的器件,就困難得多了。
其次,二進位計數(shù)制的四則運算規(guī)則十分簡單。而且四則運算最后都可歸結為加法運算和移位,這樣,電子計算機中的運算器線路也變得十分簡單了。不僅如此,線路簡化了,速度也就可以提高。這也是十進位計數(shù)制所不能相比的。
第三,在電子計算機中采用二進制表示數(shù)可以節(jié)省設備??梢詮睦碚撋献C明,用三進位制最省設備,其次就是二進位制。但由于二進位制有包括三進位制在內的其他進位制所沒有的優(yōu)點,所以大多數(shù)電子計算機還是采用二進制。此外,由于二進制中只用二個符號“0”和“1”,因而可用布爾代數(shù)來分析和綜合機器中的邏輯線路。這為設計電子計算機線路提供了一個很有用的工具。第四,二進制的符號“1”和“0”恰好與邏輯運算中的“對”(true)與“錯”(false)對應,便于計算機進行邏輯運算。
十六進制
十六進制與二進制大同小異,不同之處就是十六進制是“逢十六進一,借一當十六”。還有一點特別之處需要注意,十進制的。0?15表示成十六進制數(shù)分別為0~9,A,B,C,D,E,F,即十進制的10對應十六進制的A,11對應B,……,15對應F。我們一般在十六進制數(shù)的最后面加上后綴H,表示該數(shù)為十六進制數(shù),如AH,DEH等。這里的字母不區(qū)分大小寫,在C語言編程時要寫成“Oxa,Oxde”,在數(shù)的最前面加上“Ox”表示該數(shù)為十六進制數(shù)。十進制數(shù)與十六進制數(shù)之間的轉換在這里不再講解,大家可參考十進制數(shù)與二進制數(shù)之間的轉換規(guī)則。關于十進制、二進制與十六進制數(shù)之間的轉換,我們要熟練掌握。0?15之間的數(shù),因為在以后的單片機C語言編程當中,我們要大量使用它們。一般的轉換規(guī)律是,先將二進制數(shù)轉換成十進制數(shù),再將十進制數(shù)轉換為十六進制數(shù),若大家現(xiàn)在記憶不牢,也可在以后的學習中邊學邊加深記憶。二進制、十進制、十六進制0?15的數(shù)的轉換列表如表1.4.2所示。