官术网_书友最值得收藏!

1.3 二進(jìn)制及其運(yùn)算

課件 二進(jìn)制及其運(yùn)算

視頻 二進(jìn)制及其運(yùn)算

計(jì)算機(jī)中所有的數(shù)據(jù)都是以二進(jìn)制來表示的,單片機(jī)中的數(shù)據(jù)也是如此。

1.二進(jìn)制、八進(jìn)制、十六進(jìn)制和十進(jìn)制

組成計(jì)算機(jī)的電子元件通常有兩種穩(wěn)定狀態(tài),如電流的高或低、電路的導(dǎo)通或斷開等,這兩種狀態(tài)由0和1來表示,就形成了二進(jìn)制。所謂二進(jìn)制是指由0和1兩個(gè)數(shù)字構(gòu)成的進(jìn)制,每個(gè)數(shù)字的取值只能是0和1中的一個(gè),要么是0要么是1,數(shù)值最大為1,超過1會(huì)產(chǎn)生進(jìn)位。計(jì)算機(jī)中所有的數(shù)據(jù)或指令都是采用二進(jìn)制來表示的。由于二進(jìn)制中數(shù)字符號(hào)很少,當(dāng)需要表達(dá)復(fù)雜的含義或是數(shù)據(jù)很大時(shí),都需要增加二進(jìn)制數(shù)的位數(shù)才行。但這樣帶來的后果是指令長(zhǎng)度急劇增加,既不便于閱讀也不便于記憶。因此人們又發(fā)明了八進(jìn)制和十六進(jìn)制來簡(jiǎn)化二進(jìn)制的表達(dá)。八進(jìn)制包含由0到7八個(gè)符號(hào),十六進(jìn)制包含由0到9再加上由A到F,共16個(gè)符號(hào)。這幾種進(jìn)制在日常生活中都不怎么使用,我們平時(shí)多使用的是十進(jìn)制。

在一種進(jìn)制表示當(dāng)中,只能使用一組固定的數(shù)字符號(hào)來表示數(shù)目的大小,具體使用多少個(gè)符號(hào),這個(gè)數(shù)量被稱為數(shù)制的基數(shù)。如二進(jìn)制中需要使用0和1兩個(gè)符號(hào),所以二進(jìn)制的基數(shù)就是2。類似地十六進(jìn)制需要使用0~9、A~F共16個(gè)符號(hào),所以十六進(jìn)制的基數(shù)就是16;八進(jìn)制使用0~7共8個(gè)符號(hào),其基數(shù)就為8;其余依此類推。一個(gè)符號(hào)處在數(shù)字中不同位置時(shí)所代表的值是不同的,這與人在不同的崗位就肩負(fù)不同的職責(zé)相似。每個(gè)符號(hào)所表示的數(shù)值等于該符號(hào)乘以一個(gè)與其所在位置相關(guān)的常數(shù),這個(gè)常數(shù)就稱為位權(quán)。位權(quán)值等于基數(shù)位置值。如十進(jìn)制數(shù)123,基數(shù)為10,數(shù)字1所在位置編號(hào)是2,則它的位權(quán)是102=100;數(shù)字2所在位置編號(hào)是1,則它的位權(quán)是101=10;數(shù)字3的位置編號(hào)是0,則它的位權(quán)就是100=1。

常用進(jìn)制信息及比較見表1-3。

表1-3 常用進(jìn)制信息及比較

2.十進(jìn)制轉(zhuǎn)換為二進(jìn)制

十進(jìn)制是人們?nèi)粘I钪惺褂玫倪M(jìn)制,而二進(jìn)制是計(jì)算機(jī)中使用的進(jìn)制,這二者之間需要進(jìn)行轉(zhuǎn)換,才能使計(jì)算機(jī)接受輸入的數(shù)值。

十進(jìn)制轉(zhuǎn)換為二進(jìn)制,需要對(duì)整數(shù)部分和小數(shù)部分分別轉(zhuǎn)換,方法如下。

1)整數(shù)部分

十進(jìn)制整數(shù)轉(zhuǎn)換為二進(jìn)制整數(shù)采用“除2取余”的方法,即用十進(jìn)制整數(shù)除以2,計(jì)算每次得到的余數(shù),直至最后商為0為止,再將各步得到的余數(shù)由后向前排列,就是轉(zhuǎn)換得到的二進(jìn)制數(shù)。

例:(15)D=(1111)B。

2)小數(shù)部分

十進(jìn)制小數(shù)轉(zhuǎn)換為二進(jìn)制小數(shù)采用“乘2取整”的方法,即用十進(jìn)制小數(shù)部分乘以2,計(jì)算每次得到的整數(shù)部分,直到達(dá)到計(jì)算精度為止。將各步得到的整數(shù)從前向后依次排列并加上小數(shù)點(diǎn),即為轉(zhuǎn)換后的二進(jìn)制小數(shù)

例:(0.618)D=(0.1001)B。

對(duì)于帶有小數(shù)的十進(jìn)制數(shù),進(jìn)行二進(jìn)制轉(zhuǎn)換時(shí),要對(duì)整數(shù)部分和小數(shù)部分分開進(jìn)行轉(zhuǎn)換,最后將整數(shù)部分與小數(shù)部分組合,即為轉(zhuǎn)換后的二進(jìn)制數(shù)。

3.二進(jìn)制轉(zhuǎn)換為十進(jìn)制

二進(jìn)制轉(zhuǎn)換為十進(jìn)制,是將計(jì)算機(jī)中的數(shù)據(jù)轉(zhuǎn)換為人類可讀的數(shù)據(jù)。與上面的介紹相同,也要對(duì)整數(shù)部分與小數(shù)部分分別進(jìn)行轉(zhuǎn)換。

1)整數(shù)部分

二進(jìn)制整數(shù)轉(zhuǎn)換為十進(jìn)制可以用每一位二進(jìn)制數(shù)乘以自己的位權(quán)后求代數(shù)和的方法來實(shí)現(xiàn)。

例:(101000101)B=(325)D。

1×28+0×27+1×26+0×25+0×24+0×23+1×22+0×21+1×20=256+64+4+1=325

2)小數(shù)部分

二進(jìn)制小數(shù)轉(zhuǎn)換為十進(jìn)制也是用每一位二進(jìn)制數(shù)乘以自己的位權(quán)后求代數(shù)和的方法來實(shí)現(xiàn)。但要注意,小數(shù)點(diǎn)后數(shù)字位權(quán)中的指數(shù),是從小數(shù)點(diǎn)開始向后數(shù),依次遞減(即-1、-2、-3……)。

對(duì)于二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)也可以一次性完成。

例:(11.01011)B=(3.34375)D。

1×21+1×20+0×2-1+1×2-2+0×2-3+1×2-4+1×2-5=2+1+1/4+1/16+1/64=3.34375

4.二進(jìn)制與其他進(jìn)制之間的轉(zhuǎn)換方法

1)二進(jìn)制與八進(jìn)制的轉(zhuǎn)換

八進(jìn)制和十六進(jìn)制是人類為了簡(jiǎn)化二進(jìn)制應(yīng)用而提出來的進(jìn)制方法。在計(jì)算機(jī)中只能識(shí)別二進(jìn)制。

二進(jìn)制轉(zhuǎn)換為八進(jìn)制的方法比較簡(jiǎn)單,可以將二進(jìn)制數(shù)字從低位起,每3位分為一組,然后再將每組內(nèi)的二進(jìn)制數(shù)轉(zhuǎn)換為八進(jìn)制字符即可。

例:(1011001110)B=(1316)O。

將1011001110從右至左,每3位分成一組,即001|011|001|110,最前面一組不夠3位時(shí),可以用零補(bǔ)位。然后將各組二進(jìn)制數(shù)按照上面轉(zhuǎn)換為十進(jìn)制整數(shù)的方法,各組分別轉(zhuǎn)換,并將轉(zhuǎn)換后得到的數(shù)字排列在一起,即為轉(zhuǎn)換得到的八進(jìn)制數(shù)。

要將八進(jìn)制轉(zhuǎn)換為二進(jìn)制,同樣只要將每一位八進(jìn)制字符轉(zhuǎn)換為與其等值的3位二進(jìn)制數(shù)即可。

例:(2534)O=(10101011100)B。

將2534中的每個(gè)數(shù)字分別轉(zhuǎn)換為3位二進(jìn)制數(shù)(不足3位,在數(shù)字前面填零),然后再將結(jié)果組合起來,就是最終的結(jié)果。2轉(zhuǎn)換為二進(jìn)制為010,5轉(zhuǎn)換為二進(jìn)制為101,3轉(zhuǎn)換為二進(jìn)制為011,4轉(zhuǎn)換為二進(jìn)制為100。

2)二進(jìn)制與十六進(jìn)制的轉(zhuǎn)換

二進(jìn)制轉(zhuǎn)換為十六進(jìn)制的方法與二進(jìn)制轉(zhuǎn)換為八進(jìn)制的方法類似,從低位開始,每4位分一組,然后將每組內(nèi)的二進(jìn)制數(shù)轉(zhuǎn)換成十六進(jìn)制數(shù)即可。

例:(1011001110)B=(2CE)H。

將1011001110從右至左,每4位分成一組,即0010|1100|1110,最前面一組不夠4位時(shí),可以用零補(bǔ)齊。然后將各組二進(jìn)制數(shù)按照轉(zhuǎn)換為十進(jìn)制整數(shù)的方法,各組分別轉(zhuǎn)換,并將轉(zhuǎn)換后得到的數(shù)字排列在一起,即為轉(zhuǎn)換得到的十六進(jìn)制數(shù)。

要將十六進(jìn)制轉(zhuǎn)換為二進(jìn)制,只需將對(duì)應(yīng)的每一位十六進(jìn)制字符轉(zhuǎn)換為與其相等的4位二進(jìn)制數(shù)即可。

例:(2534)H=(10010100110100)B。

將2534中的每個(gè)數(shù)字分別轉(zhuǎn)換為4位二進(jìn)制數(shù)(不足4位,在數(shù)字前面補(bǔ)零),然后再將結(jié)果組合起來,就是最終的結(jié)果。2轉(zhuǎn)換為二進(jìn)制為0010,5轉(zhuǎn)換為二進(jìn)制為0101,3轉(zhuǎn)換為二進(jìn)制為0011,4轉(zhuǎn)換為二進(jìn)制為0100。

5.二進(jìn)制的位運(yùn)算

課件 二進(jìn)制位運(yùn)算

視頻 二進(jìn)制位運(yùn)算

位運(yùn)算是指對(duì)構(gòu)成二進(jìn)制數(shù)字的每一位進(jìn)行的運(yùn)算。在單片機(jī)的控制中,經(jīng)常會(huì)用到二進(jìn)制的位運(yùn)算。二進(jìn)制的位運(yùn)算主要有以下幾種,如表1-4所示。

表1-4 二進(jìn)制中常用的位運(yùn)算

1)與運(yùn)算

參與運(yùn)算的兩個(gè)二進(jìn)制數(shù)的對(duì)應(yīng)位進(jìn)行與運(yùn)算。其運(yùn)算規(guī)則如下:

0&0=0 0&1=0 1&0=0 1&1=1

可歸納為:參與運(yùn)算的兩個(gè)數(shù)都為1,結(jié)果才為1,否則為0。換一個(gè)角度,也可以這樣總結(jié):任何數(shù)字(1或0)與0相與,結(jié)果一定是0;任何數(shù)字(1或0)與1相與,結(jié)果仍是原數(shù)字本身。

例:(10100110)B&(01100101)B=(00100100)B。

在單片機(jī)應(yīng)用開發(fā)中,使用按位與運(yùn)算可以達(dá)到某些特殊的效果,比如要將原數(shù)字中的某幾位清0,只需讓它與另外一個(gè)對(duì)應(yīng)位為0其余位為1的數(shù)字按位與,即可達(dá)到這樣的效果。如將110101中的第2位和第4位清0,其余位不變,則只需110101與101011相與即可。(注:說明第幾位時(shí),是從右邊第0位數(shù)起的。)

2)或運(yùn)算

或運(yùn)算的運(yùn)算規(guī)則如下:

0|0=0 0|1=1 1|0=1 1|1=1

可歸納為:參與或運(yùn)算的兩個(gè)數(shù)都為0,結(jié)果才為0,否則為1。換一個(gè)角度,也可以這樣總結(jié):任何數(shù)字(1或0)與0相或,結(jié)果仍是原數(shù)字本身;任何數(shù)字(1或0)與1相或,結(jié)果一定是1。

例:(10100110)B|(01100101)B=(11100111)B。

在單片機(jī)應(yīng)用開發(fā)中,使用按位或運(yùn)算可以達(dá)到將原數(shù)字的某幾位置1其余位不變的效果。如將110101中的第1位置1其余位不變,則只需110101與000010按位或即可實(shí)現(xiàn)。

3)異或運(yùn)算

異或運(yùn)算的運(yùn)算規(guī)則如下:

0^0=0 0^1=1 1^0=1 1^1=0

可歸納為:參與異或運(yùn)算的兩個(gè)數(shù)不同,結(jié)果就為1,否則就為0。換一個(gè)角度,也可以這樣總結(jié):任何數(shù)字(1或0)與0異或,結(jié)果仍是原數(shù)字本身;任何數(shù)字(1或0)與1異或,結(jié)果是原數(shù)字的翻轉(zhuǎn);

例:(10100110)B ^(01100101)B=(11000011)B。

在單片機(jī)應(yīng)用開發(fā)中,使用異或運(yùn)算可以將原數(shù)字中的某幾位實(shí)現(xiàn)翻轉(zhuǎn)的效果。如將110101中的低4位實(shí)現(xiàn)翻轉(zhuǎn),其余位不變,則只需110101與001111按位異或即可實(shí)現(xiàn)。

4)非運(yùn)算

非運(yùn)算又稱取反運(yùn)算,非運(yùn)算只有一個(gè)運(yùn)算對(duì)象。其運(yùn)算規(guī)則如下:

~1=0 ~0=1

將某一個(gè)二進(jìn)制數(shù)取反,只需要將對(duì)應(yīng)位依次取反就可以了。

例:~(10100110)B=(01011001)B。

取反運(yùn)算的優(yōu)先級(jí)比較高,一般來講有取反運(yùn)算的要先取反運(yùn)算。如~a&b,這里要先進(jìn)行a的取反,然后再進(jìn)行與運(yùn)算。

5)移位運(yùn)算

移位運(yùn)算包括左移位和右移位,二者的運(yùn)算方法相同,只是移位的方向不同。

左移位時(shí)原數(shù)字的各位向左移動(dòng),右側(cè)用0補(bǔ)齊空位;右移位時(shí)原數(shù)字的各位向右移動(dòng),左側(cè)用0或1補(bǔ)位(原數(shù)字為正數(shù)用0補(bǔ)位,原數(shù)字為負(fù)數(shù)用1補(bǔ)位)。

例:左移位(10100110)B<<2=(10011000)B

  右移位(10100110)B>>2=(11101001)B

左移1位相當(dāng)于原數(shù)字乘以2,右移1位相當(dāng)于原數(shù)字除以2。

二進(jìn)制的位運(yùn)算在單片機(jī)應(yīng)用的開發(fā)過程中非常有用,很多看似復(fù)雜的操作,其實(shí)就是幾種位運(yùn)算的復(fù)合,比如X^(1<<(n-1)),配合循環(huán)語句就能實(shí)現(xiàn)X中的每一位數(shù)字的逐次翻轉(zhuǎn)。有關(guān)二進(jìn)制的位運(yùn)算,需要讀者開動(dòng)腦筋多做練習(xí),舉一反三,熟能生巧。

主站蜘蛛池模板: 扬中市| 惠东县| 托克逊县| 志丹县| 龙川县| 比如县| 当阳市| 黄龙县| 靖边县| 菏泽市| 波密县| 墨脱县| 宁国市| 黄山市| 伽师县| 油尖旺区| 宁南县| 黄骅市| 扶沟县| 崇州市| 右玉县| 扶风县| 栾川县| 建平县| 南城县| 章丘市| 新巴尔虎左旗| 安化县| 武鸣县| 靖边县| 密山市| 郁南县| 墨江| 六安市| 镇巴县| 无锡市| 城口县| 南汇区| 明水县| 德化县| 白玉县|