《微控制器原理及應(yīng)用技術(shù)》課件第1章_第1頁(yè)
《微控制器原理及應(yīng)用技術(shù)》課件第1章_第2頁(yè)
《微控制器原理及應(yīng)用技術(shù)》課件第1章_第3頁(yè)
《微控制器原理及應(yīng)用技術(shù)》課件第1章_第4頁(yè)
《微控制器原理及應(yīng)用技術(shù)》課件第1章_第5頁(yè)
已閱讀5頁(yè),還剩233頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第1章計(jì)算機(jī)的數(shù)制及其轉(zhuǎn)換1.1計(jì)算機(jī)的數(shù)制及其轉(zhuǎn)換

1.2計(jì)算機(jī)中數(shù)與字符的編碼1.3微型計(jì)算機(jī)的性能分析及分類(lèi)教學(xué)提示:任何數(shù)據(jù)在計(jì)算機(jī)中都用二進(jìn)制表示,而數(shù)據(jù)又有數(shù)值數(shù)據(jù)和非數(shù)值數(shù)據(jù)兩種。數(shù)值數(shù)據(jù)常用的編碼有原碼、反碼和補(bǔ)碼。由于補(bǔ)碼編碼有許多優(yōu)點(diǎn),因此大多數(shù)微機(jī)數(shù)字與字符采用補(bǔ)碼進(jìn)行編碼。在計(jì)算機(jī)內(nèi)部的十進(jìn)制數(shù)的編碼通常是BCD碼。對(duì)于非數(shù)值數(shù)據(jù),英文字母及符號(hào)通常用ASCII編碼,而漢字則需要兩個(gè)字節(jié)來(lái)進(jìn)行編碼。數(shù)制及其轉(zhuǎn)換、數(shù)與字符的編碼是計(jì)算機(jī)的基礎(chǔ)。

教學(xué)要求:本章主要介紹計(jì)算機(jī)的數(shù)制及其轉(zhuǎn)換,數(shù)與字符的編碼,微型計(jì)算機(jī)的性能等相關(guān)知識(shí)。通過(guò)本章的學(xué)習(xí)使學(xué)生了解微型計(jì)算機(jī)的特點(diǎn)、分類(lèi)、主要技術(shù)指標(biāo);掌握計(jì)算機(jī)中的數(shù)制及其轉(zhuǎn)換,計(jì)算機(jī)數(shù)據(jù)和字符的編碼。電子計(jì)算機(jī)(Computer)是20世紀(jì)人類(lèi)最重要的科技發(fā)明與成果之一。計(jì)算機(jī)是一種能夠自動(dòng)、高速、精確地進(jìn)行信息處理的現(xiàn)代化電子設(shè)備,具有算術(shù)運(yùn)算和邏輯判斷能力,并能通過(guò)預(yù)先編好的程序來(lái)自動(dòng)完成數(shù)據(jù)的處理。自1946年世界上第一臺(tái)計(jì)算機(jī)問(wèn)世以來(lái),計(jì)算機(jī)經(jīng)歷了迅速的發(fā)展,獲得了廣泛的應(yīng)用,極大地改變著人們的工作、學(xué)習(xí)和生活方式,并對(duì)國(guó)民經(jīng)濟(jì)的發(fā)展和科學(xué)技術(shù)的進(jìn)步產(chǎn)生了巨大的推動(dòng)作用。它的廣泛應(yīng)用是信息時(shí)代到來(lái)的主要標(biāo)志。

計(jì)算機(jī)按其性能、體積和價(jià)格分為巨型機(jī)、大型機(jī)、中型機(jī)、小型機(jī)和微型機(jī)五類(lèi)。微型計(jì)算機(jī)屬于第四代電子計(jì)算機(jī)產(chǎn)品,即大規(guī)模及超大規(guī)模集成電路計(jì)算機(jī),是電路技術(shù)不斷發(fā)展、芯片集成度不斷提高的產(chǎn)物。它誕生于20世紀(jì)70年代,由于它體積小,性?xún)r(jià)比高,因此廣泛地應(yīng)用在各行各業(yè)和家庭中,大大推廣和普及了計(jì)算機(jī)及其技術(shù)的應(yīng)用,加速了信息化社會(huì)的進(jìn)程。

計(jì)算機(jī)的最基本功能是進(jìn)行數(shù)據(jù)的計(jì)算和加工處理。計(jì)算機(jī)中的數(shù)是以器件的兩個(gè)不同物理狀態(tài)來(lái)表示的,一個(gè)具有兩種不同的穩(wěn)定狀態(tài)且能相互轉(zhuǎn)換的器件即可用來(lái)表示一位二進(jìn)制數(shù)。計(jì)算機(jī)中采用的就是二進(jìn)制數(shù)字系統(tǒng)。凡是需要由計(jì)算機(jī)處理的各種信息,無(wú)論是文本、字符、圖形,還是聲音、圖像,在輸入計(jì)算機(jī)內(nèi)部時(shí),都必須以二進(jìn)制編碼(不是數(shù))來(lái)表示,以方便存儲(chǔ)、傳送和處理。1.1計(jì)算機(jī)的數(shù)制及其轉(zhuǎn)換計(jì)算機(jī)內(nèi)部的信息分為兩大類(lèi):控制信息和數(shù)據(jù)信息??刂菩畔⑹且幌盗锌刂泼睿糜诳刂朴?jì)算機(jī)進(jìn)行相應(yīng)的操作;數(shù)據(jù)信息是計(jì)算機(jī)操作的對(duì)象,通常又可分為數(shù)值數(shù)據(jù)和非數(shù)值數(shù)據(jù)。數(shù)值數(shù)據(jù)用于表示數(shù)量的大小,有確定的數(shù)值;非數(shù)值數(shù)據(jù)不表示數(shù)量的大小,而表示字符、漢幀⒙輯數(shù)據(jù)等信息。

計(jì)算機(jī)所要處理的信息都要用“0”和“1”兩個(gè)基本符號(hào)(即基2碼)來(lái)編碼表示,這是因?yàn)橐韵氯齻€(gè)原因:

(1)基2碼在物理上最易實(shí)現(xiàn)。例如,可用“1”和“0”分別表示高、低兩個(gè)電位,或表示脈沖的有無(wú)或正負(fù)極性等,其可靠性較高。

(2)采用基2碼表示二進(jìn)制數(shù),其編碼、加減等運(yùn)算規(guī)則簡(jiǎn)單。

(3)基2碼的兩個(gè)符號(hào)“1”和“0”正好可用來(lái)表示邏輯數(shù)據(jù)的“真”與“假”,可使計(jì)算機(jī)的邏輯運(yùn)算簡(jiǎn)單方便。

因此,計(jì)算機(jī)內(nèi)部的各種信息都是用二進(jìn)制編碼來(lái)表示的。1.1.1數(shù)與數(shù)制

1.數(shù)制的基本概念

人們?cè)陂L(zhǎng)期的生產(chǎn)實(shí)踐和日常生活中創(chuàng)造了應(yīng)用各種數(shù)字符號(hào)表示事物數(shù)量的方法,這些數(shù)的表示方法稱(chēng)為數(shù)制。數(shù)制是以表示數(shù)值所用的數(shù)字符號(hào)的個(gè)數(shù)來(lái)命名的,數(shù)制有多種形式,例如人們最常用到的十進(jìn)制。生活中也常常用到其它進(jìn)制,如十二進(jìn)制、十六進(jìn)制、六十進(jìn)制,以及計(jì)算機(jī)中使用的二進(jìn)制等。進(jìn)位計(jì)數(shù)制,又稱(chēng)位置計(jì)數(shù)制,是用一組固定的數(shù)字符號(hào)和統(tǒng)一的進(jìn)位規(guī)則進(jìn)行計(jì)數(shù)的科學(xué)方法,簡(jiǎn)稱(chēng)進(jìn)位制。凡是按進(jìn)位的方法計(jì)數(shù)的數(shù)制都是進(jìn)位計(jì)數(shù)制,它有一個(gè)規(guī)則,就是N進(jìn)制必須逢N進(jìn)一。進(jìn)位制中還有數(shù)碼、基數(shù)、權(quán)三個(gè)常用術(shù)語(yǔ)。

數(shù)碼:數(shù)制中表示數(shù)值大小的不同數(shù)字符號(hào)。例如,十進(jìn)制中有0、1、2、3、4、5、6、7、8、9共10個(gè)數(shù)碼。

基數(shù):也稱(chēng)基,是指某進(jìn)位計(jì)數(shù)制中每個(gè)數(shù)位(數(shù)字位置)上允許選用的基本數(shù)碼的個(gè)數(shù)。如二進(jìn)制數(shù)的基數(shù)為2,N進(jìn)制數(shù)的基數(shù)為N?;鶖?shù)體現(xiàn)了該數(shù)制中進(jìn)位和借位的原則:當(dāng)在某一位數(shù)上計(jì)夠一個(gè)基數(shù)時(shí)需要向上進(jìn)1;反之,從上位借1在下位當(dāng)一個(gè)整基數(shù)來(lái)使用。權(quán):數(shù)制中每一個(gè)數(shù)位所具有的基值(即此數(shù)位上所表示出來(lái)的最小數(shù)值)稱(chēng)為該位上的權(quán),也稱(chēng)位權(quán)。由于存在進(jìn)位,同一數(shù)字符號(hào)在不同的數(shù)位上所代表的數(shù)值是不同的。權(quán)一般以相應(yīng)進(jìn)位制的基數(shù)冪的形式來(lái)表示。例如,十進(jìn)制數(shù)1234.56,每個(gè)數(shù)位上的權(quán)是10的某次冪,從左到右各位上的權(quán)分別為:103、102、101、100、10-1、10-2。每個(gè)數(shù)位上的數(shù)字所表示的數(shù)值是這個(gè)數(shù)字和該數(shù)位的權(quán)的乘積。因此,對(duì)任意進(jìn)位制數(shù)都可以寫(xiě)成按權(quán)展開(kāi)的冪的多項(xiàng)式和的形式:

式(1.1)中,i是數(shù)位;n和m為正整數(shù),n表示小數(shù)點(diǎn)左邊的位數(shù),m表示小數(shù)點(diǎn)右邊的位數(shù);ai是任意進(jìn)位制數(shù)N的第i位的數(shù)碼;R為基數(shù),Ri為第i位的權(quán)。

總的來(lái)看,各種進(jìn)位計(jì)數(shù)制均有以下幾個(gè)主要特點(diǎn):

(1)每種計(jì)數(shù)制有一個(gè)確定的基數(shù)R,其數(shù)碼個(gè)數(shù)等于基數(shù),最大數(shù)碼比基數(shù)小1。

(2)每個(gè)數(shù)位上的數(shù)碼乘以該數(shù)位的權(quán)就得到該數(shù)位上的數(shù)字所表示的數(shù)值。

(3)低位向高位的進(jìn)位規(guī)則是“逢基數(shù)R進(jìn)一”。在混合小數(shù)中,小數(shù)點(diǎn)右移一位相當(dāng)于乘以R;反之,相當(dāng)于除以R。

為了區(qū)別各種計(jì)數(shù)制的數(shù)據(jù),常采用下述兩種方法來(lái)表達(dá):

(1)在數(shù)字后面加相應(yīng)的英文字母來(lái)表示該數(shù)的數(shù)制。如:十進(jìn)制數(shù)用D(Decimal)表示,通常計(jì)算機(jī)操作中默認(rèn)使用的是十進(jìn)制,所以十進(jìn)制數(shù)的后綴可以省略;二進(jìn)制數(shù)用B(Binary)表示,如101110B;八進(jìn)制數(shù)用O(Octal)表示,為了不和0混淆,也可以用Q來(lái)表示八進(jìn)制數(shù),如346Q;十六進(jìn)制數(shù)用H(Hexadecimal)表示,如19H。

(2)在括號(hào)外邊加數(shù)字下標(biāo),這種表示方法比較直觀。例如二進(jìn)制數(shù)10101可以寫(xiě)成(10101)2。

2.幾種常用的進(jìn)位計(jì)數(shù)制

計(jì)算機(jī)中采用的是二進(jìn)制計(jì)數(shù)制。但是,由于書(shū)寫(xiě)、鍵入、讀出二進(jìn)制數(shù)時(shí)極易出差錯(cuò),而微機(jī)的字長(zhǎng)又都是4的整數(shù)倍數(shù)(分別為4位、8位、16位、32位和64位等),考慮到23=8、24=16,因此在編程時(shí),為了使書(shū)寫(xiě)和閱讀既方便又不易出錯(cuò),還常常采用八進(jìn)制計(jì)數(shù)和十六進(jìn)制計(jì)數(shù)。此外,人們對(duì)十進(jìn)制計(jì)數(shù)最為熟悉,因此輸入和輸出計(jì)算機(jī)的數(shù)經(jīng)常使用十進(jìn)制數(shù)來(lái)表示。這樣各種進(jìn)位計(jì)數(shù)制之間就存在著一種對(duì)應(yīng)轉(zhuǎn)換關(guān)系。

(1)十進(jìn)制數(shù)(DecimalNotation)。

人們習(xí)慣使用的十進(jìn)制數(shù)有以下特點(diǎn):

①10個(gè)數(shù)碼,即0、1、2、3、4、5、6、7、8和9。十進(jìn)制數(shù)的基數(shù)是10,可以用0~9十個(gè)數(shù)字和一個(gè)小數(shù)點(diǎn)符號(hào)來(lái)表示任意十進(jìn)制數(shù)。②每個(gè)數(shù)碼表示的值不僅取決于數(shù)碼本身,還取決于它所處的位置。相同的數(shù)碼在不同位置的權(quán)不同,所表示的數(shù)值不同。十進(jìn)制數(shù)各位的權(quán)是10的整數(shù)次冪。例如,個(gè)位的權(quán)為100,十位的權(quán)為101,百位的權(quán)為102等。

③遵從“逢十進(jìn)一,借一當(dāng)十”的規(guī)則。

例1.1333.33=333.33D=(333.33)10

=3×102+3×101+3×100+3×10-1+3×10-2

(2)二進(jìn)制數(shù)(BinaryNotation)。

二進(jìn)制數(shù)有以下特點(diǎn):

①2個(gè)數(shù)碼,即0和1,二進(jìn)制數(shù)的基數(shù)是2。

②二進(jìn)制數(shù)各數(shù)位上的權(quán)是2的整數(shù)次冪。小數(shù)點(diǎn)左邊的權(quán)是2的正次冪,小數(shù)點(diǎn)右邊的權(quán)是2的負(fù)次冪。二進(jìn)制數(shù)的值可以用它的按權(quán)展開(kāi)式表示。

③遵從“逢二進(jìn)一,借一當(dāng)二”的規(guī)則。

例1.21011.01B=(1011.01)2

=1×23+0×22+1×21+1×20+0×2-1+1×2-2另外,二進(jìn)制數(shù)還具有一些獨(dú)特的性質(zhì),這些性質(zhì)奠定了當(dāng)代計(jì)算機(jī)的設(shè)計(jì)基礎(chǔ)。這些性質(zhì)是:

①具有兩個(gè)不同的數(shù)碼,很容易在自然界中找到兩個(gè)不同的穩(wěn)定狀態(tài)來(lái)表示。

②小數(shù)點(diǎn)向右移一位,數(shù)值增大一倍;反之,即小數(shù)點(diǎn)向左移一位,數(shù)值減小一半。

③對(duì)于二進(jìn)制的整數(shù)而言,若其最低位為1,則值為奇數(shù);最低位為0,則值為偶數(shù)。

④二進(jìn)制數(shù)的運(yùn)算規(guī)則簡(jiǎn)單。如:0+0=0;0+1=1;1+0=1;1+1=0(此時(shí)向上進(jìn)位1)。

可見(jiàn),兩個(gè)一位的二進(jìn)制數(shù)相加運(yùn)算,其本位和的運(yùn)算正好是二值異或邏輯運(yùn)算的關(guān)系,進(jìn)位則是二值與邏輯運(yùn)算的關(guān)系。所以,在計(jì)算機(jī)中,二進(jìn)制數(shù)的運(yùn)算是用邏輯運(yùn)算來(lái)實(shí)現(xiàn)的。

(3)八進(jìn)制數(shù)(OctalNotation)。

八進(jìn)制數(shù)有以下特點(diǎn):

①8個(gè)數(shù)碼,即0、1、2、3、4、5、6和7,八進(jìn)制數(shù)的基數(shù)是8。

②八進(jìn)制數(shù)各數(shù)位上的權(quán)是8的整數(shù)次冪。八進(jìn)制數(shù)的值也可以用它的按權(quán)展開(kāi)式來(lái)表示。

③遵從“逢八進(jìn)一,借一當(dāng)八”的規(guī)則。

例1.3248.15Q=(248.15)8

=2×82+4×81+8×80+1×8-1+5×8-2

(4)十六進(jìn)制數(shù)(HexadecimalNotation)。

十六進(jìn)制數(shù)有以下特點(diǎn):

①16個(gè)數(shù)碼,即0、1、2、3、4、5、6、7、8、9、A、B、C、D、E和F,其中A~F表示10~15這六個(gè)數(shù),十六進(jìn)制數(shù)的基數(shù)是16。

②十六進(jìn)制數(shù)各數(shù)位上的權(quán)是16的整數(shù)次冪。十六進(jìn)制數(shù)的值也可以用它的按權(quán)展開(kāi)式來(lái)表示。

③遵從“逢十六進(jìn)一,借一當(dāng)十六”的規(guī)則。

例1.469C.B5H=(69C.B5)16

=6×162+9×161+12×160+11×16-1+5×16-2

注意:在實(shí)際表示時(shí),一個(gè)十六進(jìn)制數(shù)如果最高位數(shù)字為字母(A~F),則在字母前面必須加一個(gè)0,以便與指令名、變量名、數(shù)據(jù)等相區(qū)別,如0E0H。

二進(jìn)制數(shù)、八進(jìn)制數(shù)和十六進(jìn)制數(shù)之間存在特殊的關(guān)系,即一位八進(jìn)制數(shù)恰好可以用三位二進(jìn)制數(shù)來(lái)表示;一位十六進(jìn)制數(shù)恰好可以用四位二進(jìn)制數(shù)來(lái)表示,即八進(jìn)制數(shù)和十六進(jìn)制數(shù)可作為二進(jìn)制數(shù)的縮寫(xiě)形式,且它們之間的關(guān)系是唯一的。計(jì)算機(jī)中常用的二進(jìn)制數(shù)、八進(jìn)制數(shù)、十進(jìn)制數(shù)和十六進(jìn)制數(shù)之間的對(duì)應(yīng)關(guān)系如表1.1所示。表1.1二進(jìn)制、八進(jìn)制、十進(jìn)制和十六進(jìn)制的對(duì)應(yīng)關(guān)系1.1.2不同數(shù)制間的轉(zhuǎn)換

由于人們習(xí)慣用十進(jìn)制計(jì)數(shù),在研究問(wèn)題或討論解題的過(guò)程時(shí),總是用十進(jìn)制來(lái)考慮和書(shū)寫(xiě)的。當(dāng)考慮成熟后,要把問(wèn)題變成計(jì)算機(jī)能夠“看得懂”的形式時(shí),就需把問(wèn)題中的所有十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù),這就需要用到“十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)的方法”。在計(jì)算機(jī)運(yùn)算得到二進(jìn)制數(shù)的結(jié)果時(shí),又需要用到“二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)的方法”,才能把運(yùn)算結(jié)果用十進(jìn)制形式顯示出來(lái)。同樣,有時(shí)我們也需要實(shí)現(xiàn)十進(jìn)制數(shù)和其它進(jìn)位制數(shù)之間的轉(zhuǎn)換以及二進(jìn)制數(shù)和八進(jìn)制數(shù)、十六進(jìn)制數(shù)之間的轉(zhuǎn)換。所有這些不同進(jìn)制的數(shù)碼之間的轉(zhuǎn)換都叫做數(shù)制轉(zhuǎn)換。

1.二進(jìn)制數(shù)與十進(jìn)制數(shù)之間的轉(zhuǎn)換

1)二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)

將一個(gè)二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)十分簡(jiǎn)單,只要將二進(jìn)制數(shù)的每一位(0或1)分別乘以它所對(duì)應(yīng)的權(quán),然后把各乘積項(xiàng)加起來(lái)就可以求得二進(jìn)制數(shù)的十進(jìn)制數(shù)值。簡(jiǎn)單地說(shuō)就是“按權(quán)展開(kāi)后相加求和”。例1.5將二進(jìn)制數(shù)1101.101轉(zhuǎn)換為十進(jìn)制數(shù)。

其轉(zhuǎn)換過(guò)程如下:

1101.101B=(1101.101)2

=1×23+1×22+0×21+1×20+1×2-1+0×2-2+1×2-3

=8+4+1+0.5+0.125

=13.625

1101.101B=13.625

2)十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)

十進(jìn)制數(shù)轉(zhuǎn)換為任意非十進(jìn)制數(shù)時(shí),整數(shù)和純小數(shù)的轉(zhuǎn)換方法不同。一個(gè)既有整數(shù)部分又有小數(shù)部分的十進(jìn)制數(shù),則須對(duì)整數(shù)和小數(shù)兩部分分別進(jìn)行轉(zhuǎn)換,然后再組合起來(lái)。

①十進(jìn)制整數(shù)轉(zhuǎn)換為二進(jìn)制整數(shù)。

十進(jìn)制整數(shù)轉(zhuǎn)換為二進(jìn)制整數(shù)通常采用以下兩種方法:

方法一:減權(quán)定位法,也稱(chēng)降冪法。具體做法是將十進(jìn)制數(shù)作為被減數(shù),依次同距它最近的二進(jìn)制高位權(quán)值比較,若夠減則減去該位權(quán)值,并使對(duì)應(yīng)位數(shù)碼為1,再將差值作為被減數(shù)往下比較;若不夠減,對(duì)應(yīng)位數(shù)碼為0,然后越過(guò)該位與低一位權(quán)值比較,重復(fù)此過(guò)程,直到差為0或達(dá)到所需精度(對(duì)應(yīng)小數(shù)轉(zhuǎn)換時(shí))為止。此種方法既可用于整數(shù)的轉(zhuǎn)換,又可用于小數(shù)的轉(zhuǎn)換。該方法也可用于十進(jìn)制數(shù)和八進(jìn)制數(shù)、十進(jìn)制數(shù)和十六進(jìn)制數(shù)的轉(zhuǎn)換。例1.6用減權(quán)定位法將163.75轉(zhuǎn)換為二進(jìn)制數(shù)。

方法二:十進(jìn)制整數(shù)轉(zhuǎn)換為二進(jìn)制整數(shù)更多的采用“除2取余,逆序排列”法。具體做法是將十進(jìn)制整數(shù)除以二進(jìn)制的基數(shù)2,得到一個(gè)商和一個(gè)余數(shù);取其余數(shù)(必定是0或1)作為相應(yīng)二進(jìn)制整數(shù)的最低位A0,然后繼續(xù)用商除以2,又得到一個(gè)商和一個(gè)余數(shù);取其余數(shù)作為二進(jìn)制整數(shù)的次低位A1,依次重復(fù)此過(guò)程,直到商為0為止。

注意:第一次得到的余數(shù)為二進(jìn)制數(shù)的最低位,最后得到的余數(shù)為二進(jìn)制數(shù)的最高位。依次從最高位到最低位寫(xiě)出,就是整數(shù)部分的二進(jìn)制數(shù)。

②十進(jìn)制小數(shù)轉(zhuǎn)換為二進(jìn)制小數(shù)。

十進(jìn)制小數(shù)轉(zhuǎn)換成二進(jìn)制小數(shù)采用“乘2取整,順序排列”法。具體做法是用二進(jìn)制基數(shù)2乘以十進(jìn)制小數(shù),可以得到積的整數(shù)和小數(shù)部分,將積的整數(shù)部分(當(dāng)十進(jìn)制小數(shù)大于0.5時(shí)整數(shù)位為1,當(dāng)該小數(shù)小于0.5時(shí)整數(shù)位為0)取出,作為二進(jìn)制小數(shù)的小數(shù)點(diǎn)后的第一位(小數(shù)部分的最高位)A-1,然后再用2乘以余下的小數(shù)部分,又得到一個(gè)積,再將積的整數(shù)部分取出作為小數(shù)部分的第二位A-2,如此重復(fù)該過(guò)程,直到積中的小數(shù)部分為0,或者達(dá)到所要求的精度為止(有乘不盡的可能)。然后把每次取出的整數(shù)部分(必定是0或1)按先后順序從左到右排列起來(lái),就得到轉(zhuǎn)換后的二進(jìn)制小數(shù)。注意:第一次取出的整數(shù)為二進(jìn)制小數(shù)的最高位,最后一次所取得的整數(shù)為其最低位。

例1.7將十進(jìn)制數(shù)139.8125轉(zhuǎn)換成二進(jìn)制數(shù)。

其轉(zhuǎn)換過(guò)程如下:

整數(shù)部分的轉(zhuǎn)換:

139÷2=69……余數(shù)為1,對(duì)應(yīng)二進(jìn)制位A0=1(最低位)

69÷2=34……余數(shù)為1,對(duì)應(yīng)二進(jìn)制位A1=1

34÷2=17……余數(shù)為0,對(duì)應(yīng)二進(jìn)制位A2=0

17÷2=8……余數(shù)為1,對(duì)應(yīng)二進(jìn)制位A3=1

8÷2=4……余數(shù)為0,對(duì)應(yīng)二進(jìn)制位A4=0

4÷2=2……余數(shù)為0,對(duì)應(yīng)二進(jìn)制位A5=0

2÷2=1……余數(shù)為0,對(duì)應(yīng)二進(jìn)制位A6=0

1÷2=0……余數(shù)為1,對(duì)應(yīng)二進(jìn)制位A7=1(最高位)

整數(shù)部分的轉(zhuǎn)換結(jié)果:(139)10=(10001011)2

小數(shù)部分的轉(zhuǎn)換:

0.8125×2=1.625……整數(shù)為1,對(duì)應(yīng)二進(jìn)制位A-1=1(最高位)

0.625×2=1.25……整數(shù)為1,對(duì)應(yīng)二進(jìn)制位A-2=1

0.25×2=0.5……整數(shù)為0,對(duì)應(yīng)二進(jìn)制位A-3=0

0.5×2=1.0……整數(shù)為1,對(duì)應(yīng)二進(jìn)制位A-4=1(最低位)

小數(shù)部分的轉(zhuǎn)換結(jié)果:(0.8125)10=(0.1101)2

最后轉(zhuǎn)化結(jié)果為:(139.8125)10=(10001011.1101)2或139.8125D=10001011.1101B

例1.8將十進(jìn)制數(shù)27.3轉(zhuǎn)換為二進(jìn)制數(shù),要求其精度為4%。

其轉(zhuǎn)換過(guò)程如下:

整數(shù)部分的轉(zhuǎn)換:

27÷2=13……余數(shù)為1,對(duì)應(yīng)二進(jìn)制位A0=1(最低位)

13÷2=6……余數(shù)為1,對(duì)應(yīng)二進(jìn)制位A1=1

6÷2=3……余數(shù)為0,對(duì)應(yīng)二進(jìn)制位A2=0

3÷2=1……余數(shù)為1,對(duì)應(yīng)二進(jìn)制位A3=1

1÷2=0……余數(shù)為1,對(duì)應(yīng)二進(jìn)制位A4=1(最高位)

整數(shù)部分的轉(zhuǎn)換結(jié)果:(27)10=(11011)2

小數(shù)部分的轉(zhuǎn)換:

由于精度要求為4%,故應(yīng)該令2-m≤4%=5-2,可得2m≥52=25,則m≥5,即要求其誤差不大于2-5。

0.3×2=0.6……整數(shù)為0,對(duì)應(yīng)二進(jìn)制位A-1=0(權(quán)為2-1,最高位)

0.6×2=1.2……整數(shù)為1,對(duì)應(yīng)二進(jìn)制位A-2=1

0.2×2=0.4……整數(shù)為0,對(duì)應(yīng)二進(jìn)制位A-3=0

0.4×2=0.8……整數(shù)為0,對(duì)應(yīng)二進(jìn)制位A-4=0

0.8×2=1.6……整數(shù)為1,對(duì)應(yīng)二進(jìn)制位A-5=1(權(quán)為

2-5,最低位)

小數(shù)部分的轉(zhuǎn)換結(jié)果:(0.3)10=(0.01001)2

最后轉(zhuǎn)化結(jié)果為:(27.3)10=(11011.01001)2

2.八進(jìn)制數(shù)與十進(jìn)制數(shù)之間的轉(zhuǎn)換

1)八進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)

同二進(jìn)制轉(zhuǎn)換成十進(jìn)制的方法相似,即按權(quán)展開(kāi)后相加求和。

例1.9將八進(jìn)制數(shù)126.14轉(zhuǎn)換為十進(jìn)制數(shù)。

其轉(zhuǎn)換過(guò)程如下:

126.14Q=(126.14)8

=1×82+2×81+6×80+1×8-1+4×8-2

=64+16+6+0.125+0.0625

=86.1875

即(126.14)8=86.1875

2)十進(jìn)制整數(shù)轉(zhuǎn)換成八進(jìn)制整數(shù)

十進(jìn)制整數(shù)轉(zhuǎn)換為八進(jìn)制整數(shù)采用“除8取余,逆序排列”法。具體做法是將十進(jìn)制整數(shù)除以八進(jìn)制的基數(shù)8,得到一個(gè)商和一個(gè)余數(shù);取其余數(shù)(必定是小于8的整數(shù))作為相應(yīng)八進(jìn)制整數(shù)的最低位A0,然后繼續(xù)用商除以8,又得到一個(gè)商和一個(gè)余數(shù);取其余數(shù)作為八進(jìn)制整數(shù)的次低位A1,依次重復(fù)此過(guò)程,直到商為0為止。

注意:第一次得到的余數(shù)為八進(jìn)制數(shù)的最低位,最后得到的余數(shù)為八進(jìn)制數(shù)的最高位。依次從最高位到最低位寫(xiě)出,就是整數(shù)部分的八進(jìn)制數(shù)。

3)十進(jìn)制小數(shù)轉(zhuǎn)換為八進(jìn)制小數(shù)

十進(jìn)制小數(shù)轉(zhuǎn)換成八進(jìn)制小數(shù)采用“乘8取整,順序排列”法。具體做法是用八進(jìn)制基數(shù)8乘以十進(jìn)制小數(shù),可以得到積的整數(shù)和小數(shù)部分,將積的整數(shù)部分(必定是小于8的整數(shù))取出,作為八進(jìn)制小數(shù)部分的最高位A-1,然后再用8乘以余下的小數(shù)部分,又得到一個(gè)積,再將積的整數(shù)部分取出作為八進(jìn)制小數(shù)部分的第二位A-2,如此重復(fù)該過(guò)程,直到積中的小數(shù)部分為0,或者達(dá)到所要求的精度為止。然后把每次的整數(shù)部分按先后順序從左到右排列起來(lái),就得到轉(zhuǎn)換后的八進(jìn)制小數(shù)。例1.10將十進(jìn)制數(shù)239.32轉(zhuǎn)換成八進(jìn)制數(shù)(轉(zhuǎn)換結(jié)果取4位小數(shù))。

其轉(zhuǎn)換過(guò)程如下:

整數(shù)部分的轉(zhuǎn)換:

239÷8=29……余數(shù)為7,對(duì)應(yīng)八進(jìn)制位A0=7(最低位)

29÷8=3……余數(shù)為5,對(duì)應(yīng)八進(jìn)制位A1=5

3÷8=0……余數(shù)為3,對(duì)應(yīng)八進(jìn)制位A2=3(最高位)

整數(shù)部分的轉(zhuǎn)換結(jié)果:(239)10=(357)8小數(shù)部分的轉(zhuǎn)換:

0.32×8=2.56……整數(shù)為2,對(duì)應(yīng)八進(jìn)制位A-1=2(最高位)

0.56×8=4.48……整數(shù)為4,對(duì)應(yīng)八進(jìn)制位A-2=4

0.48×8=3.84……整數(shù)為3,對(duì)應(yīng)八進(jìn)制位A-3=3

0.84×8=6.72……整數(shù)為6,對(duì)應(yīng)八進(jìn)制位A-4=6(最低位)小數(shù)部分的轉(zhuǎn)換結(jié)果:(0.32)10≈(0.2436)8

最后轉(zhuǎn)化結(jié)果為:(239.32)10=(357.2436)8或239.32D=357.2436Q

3.十六進(jìn)制數(shù)與十進(jìn)制數(shù)之間的轉(zhuǎn)換

1)十六進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)

同二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)的方法相似,按權(quán)展開(kāi)后相加求和。

例1.11將十六進(jìn)制數(shù)5F6.C8轉(zhuǎn)換為十進(jìn)制數(shù)。其轉(zhuǎn)換過(guò)程如下:

5F6.C8H=(5F6.C8)16

=5×162+15×161+6×160+12×16-1+8×16-2

=1280+240+6+0.75+0.03125

=1526.78125

5F6.C8H=1526.78125D

2)十進(jìn)制整數(shù)轉(zhuǎn)換成十六進(jìn)制整數(shù)十進(jìn)制整數(shù)轉(zhuǎn)換為十六進(jìn)制整數(shù)采用“除16取余,逆序排列”法。具體做法是將十進(jìn)制整數(shù)除以十六進(jìn)制的基數(shù)16,得到一個(gè)商和一個(gè)余數(shù);取其余數(shù)(必定是小于F的數(shù))作為相應(yīng)十六進(jìn)制整數(shù)的最低位A0,然后繼續(xù)用商除以16,又得到一個(gè)商和一個(gè)余數(shù);取其余數(shù)作為十六進(jìn)制整數(shù)的次低位A1,依次重復(fù)此過(guò)程,直到商為0為止。

注意:第一次得到的余數(shù)為十六進(jìn)制數(shù)的最低位,最后得到的余數(shù)為十六進(jìn)制數(shù)的最高位。依次從最高位到最低位寫(xiě)出,就是整數(shù)部分的十六進(jìn)制數(shù)。

3)十進(jìn)制小數(shù)轉(zhuǎn)換為十六進(jìn)制小數(shù)

十進(jìn)制小數(shù)轉(zhuǎn)換成十六進(jìn)制小數(shù)采用“乘16取整,順序排列”法。具體做法是用十六進(jìn)制基數(shù)16乘以十進(jìn)制小數(shù),可以得到積的整數(shù)和小數(shù)部分,將積的整數(shù)部分(必定是小于F的數(shù))取出,作為十六進(jìn)制小數(shù)部分的最高位A-1,然后再用16乘以余下的小數(shù)部分,又得到一個(gè)積,再將積的整數(shù)部分取出作為十六進(jìn)制小數(shù)部分的第二位A-2,如此重復(fù)該過(guò)程,直到積中的小數(shù)部分為0,或者達(dá)到所要求的精度為止。然后把每次獲得的整數(shù)部分按先后順序從左到右排列起來(lái),就得到轉(zhuǎn)換后的十六進(jìn)制小數(shù)。

例1.12將十進(jìn)制數(shù)58312.46轉(zhuǎn)換成十六進(jìn)制數(shù)(轉(zhuǎn)換結(jié)果取4位小數(shù))。

其轉(zhuǎn)換過(guò)程如下:

整數(shù)部分的轉(zhuǎn)換:

58312÷16=3644……余數(shù)為8,對(duì)應(yīng)十六進(jìn)制位A0=8(最低位)

3644÷16=227……余數(shù)為12,對(duì)應(yīng)十六進(jìn)制位A1=C

227÷16=14……余數(shù)為3,對(duì)應(yīng)十六進(jìn)制位A2=3

14÷16=0……余數(shù)為14,對(duì)應(yīng)十六進(jìn)制位A3=E(最高位)

整數(shù)部分的轉(zhuǎn)換結(jié)果:(58312)10=(E3C8)16小數(shù)部分的轉(zhuǎn)換:

0.46×16=7.36……整數(shù)為7,對(duì)應(yīng)十六進(jìn)制位A-1=7(最高位)

0.36×16=5.76……整數(shù)為5,對(duì)應(yīng)十六進(jìn)制位A-2=5

0.76×16=12.16……整數(shù)為12,對(duì)應(yīng)十六進(jìn)制位A-3=C

0.16×16=2.56……整數(shù)為2,對(duì)應(yīng)十六進(jìn)制位A-4=2(最低位)

小數(shù)部分的轉(zhuǎn)換結(jié)果:(0.46)10≈(0.75C2)16

最后轉(zhuǎn)化結(jié)果為:(58312.46)10=(E3C8.75C2)16或58312.46D=0E3C8.75C2H

4.二進(jìn)制數(shù)、八進(jìn)制數(shù)和十六進(jìn)制數(shù)之間的轉(zhuǎn)換

由于23=8,24=16,3位二進(jìn)制數(shù)可以有8個(gè)狀態(tài),即000~111,正好是八進(jìn)制,而4位二進(jìn)制數(shù)可以有16個(gè)狀態(tài),即0000~1111,正好是十六進(jìn)制。這說(shuō)明每三位二進(jìn)制數(shù)對(duì)應(yīng)一位八進(jìn)制數(shù);每四位二進(jìn)制數(shù)對(duì)應(yīng)一位十六進(jìn)制數(shù),因此二進(jìn)制數(shù)與八進(jìn)制數(shù)和十六進(jìn)制數(shù)之間的相互轉(zhuǎn)換很容易實(shí)現(xiàn)。

1)二進(jìn)制數(shù)轉(zhuǎn)換成八進(jìn)制數(shù)

二進(jìn)制數(shù)轉(zhuǎn)換成八進(jìn)制數(shù)的方法是將二進(jìn)制數(shù)從小數(shù)點(diǎn)所在位開(kāi)始,向左每三位分成一組,然后寫(xiě)出每一組的等值八進(jìn)制數(shù),若小數(shù)點(diǎn)左側(cè)的位數(shù)不是3的整數(shù)倍,則在二進(jìn)制數(shù)的最左側(cè)補(bǔ)0,這樣得到整數(shù)部分的八進(jìn)制數(shù);向右也每三位分成一組,然后寫(xiě)出每一組的等值八進(jìn)制數(shù),若小數(shù)點(diǎn)右側(cè)的位數(shù)不是3的整數(shù)倍,則在二進(jìn)制數(shù)的最右側(cè)補(bǔ)0,得到小數(shù)部分的八進(jìn)制數(shù),最后把整數(shù)部分和小數(shù)部分順序排列起來(lái)就得到所要求的八進(jìn)制數(shù)。例1.13將二進(jìn)制數(shù)10100011.11B轉(zhuǎn)換成八進(jìn)制數(shù)。

其轉(zhuǎn)換過(guò)程如下:

先分組010100011. 110

↓ ↓ ↓ ↓

2 4 3 . 6

所以,轉(zhuǎn)換的結(jié)果為:

10100011.11B=243.6Q

2)八進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)

八進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)的方法是將每一位八進(jìn)制數(shù)分別轉(zhuǎn)換成對(duì)應(yīng)的三位二進(jìn)制數(shù),按順序排列后即為八進(jìn)制數(shù)所對(duì)應(yīng)的二進(jìn)制數(shù)。

例1.14將八進(jìn)制數(shù)146.703Q轉(zhuǎn)換成二進(jìn)制數(shù)。

其轉(zhuǎn)換過(guò)程如下:

1 4 6 . 7 0 3

↓ ↓ ↓ ↓ ↓ ↓

001 100 110 . 111 000 011所以,轉(zhuǎn)換的結(jié)果為:

146.703Q=1100110.111000011B

3)二進(jìn)制數(shù)轉(zhuǎn)換成十六進(jìn)制數(shù)

二進(jìn)制數(shù)轉(zhuǎn)換成十六進(jìn)制數(shù)的方法是將二進(jìn)制數(shù)從小數(shù)點(diǎn)所在位開(kāi)始,向左每四位分成一組,然后寫(xiě)出每一組的等值十六進(jìn)制數(shù),若小數(shù)點(diǎn)左側(cè)的位數(shù)不是4的整數(shù)倍,則在二進(jìn)制數(shù)的最左側(cè)補(bǔ)0,這樣得到整數(shù)部分的十六進(jìn)制數(shù);向右也每四位分成一組,然后寫(xiě)出每一組的等值十六進(jìn)制數(shù),若小數(shù)點(diǎn)右側(cè)的位數(shù)不是4的整數(shù)倍,則在二進(jìn)制數(shù)的最右側(cè)補(bǔ)0,得到小數(shù)部分的十六進(jìn)制數(shù),最后把整數(shù)部分和小數(shù)部分順序排列起來(lái)就得到所要求的十六進(jìn)制數(shù)。

例1.15將二進(jìn)制數(shù)10100011.111001B轉(zhuǎn)換成十六進(jìn)制數(shù)。

其轉(zhuǎn)換過(guò)程如下:

先分組 10100011.11100100

↓ ↓ ↓ ↓

A 3. E 4

所以,轉(zhuǎn)換的結(jié)果為:

10100011.111001B=0A3.E4H

4)十六進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)

十六進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)的方法是將每一位十六進(jìn)制數(shù)分別轉(zhuǎn)換成對(duì)應(yīng)的四位二進(jìn)制數(shù),按順序排列后即為十六進(jìn)制數(shù)所對(duì)應(yīng)的二進(jìn)制數(shù)。

例1.16將十六進(jìn)制數(shù)75A.88H轉(zhuǎn)換成二進(jìn)制數(shù)。

其轉(zhuǎn)換過(guò)程如下:

7 5 A . 8 8

↓ ↓ ↓ ↓ ↓

0111 0101 1010 . 1000 1000

所以,轉(zhuǎn)換的結(jié)果為:

75A.88H=11101011010.10001B

八進(jìn)制數(shù)和十六進(jìn)制數(shù)主要用來(lái)簡(jiǎn)化二進(jìn)制數(shù)的書(shū)寫(xiě)。由于采用八進(jìn)制數(shù)和十六進(jìn)制數(shù)表示的二進(jìn)制數(shù)較短,且便于記憶,所以在PC機(jī)中主要使用十六進(jìn)制數(shù)表示和編碼二進(jìn)制數(shù),所以必須十分熟悉二進(jìn)制數(shù)與十六進(jìn)制數(shù)的對(duì)應(yīng)關(guān)系。

另外,十六進(jìn)制數(shù)和八進(jìn)制數(shù)之間也可以進(jìn)行相互轉(zhuǎn)換,一般可通過(guò)先將十六進(jìn)制數(shù)(或八進(jìn)制數(shù))轉(zhuǎn)換成二進(jìn)制數(shù),然后再將二進(jìn)制數(shù)轉(zhuǎn)換成八進(jìn)制數(shù)(或十六進(jìn)制數(shù))。若要將十進(jìn)制數(shù)轉(zhuǎn)換成八進(jìn)制或十六進(jìn)制數(shù),除采用前面介紹過(guò)的方法外,還可先將其轉(zhuǎn)換成二進(jìn)制數(shù),然后再分組,進(jìn)而轉(zhuǎn)換成八進(jìn)制數(shù)或十六進(jìn)制數(shù)。

5.二進(jìn)制數(shù)的算術(shù)運(yùn)算

采用二進(jìn)制實(shí)現(xiàn)各種算術(shù)與邏輯運(yùn)算,是因?yàn)槎M(jìn)制數(shù)中每一位都只有0和1兩個(gè)數(shù)。它們表示兩種不同狀態(tài),所以其物理過(guò)程很容易實(shí)現(xiàn),如它很好地對(duì)應(yīng)著電位的高與低、電流的有與無(wú)及半導(dǎo)體的飽和與截止等。而且,二進(jìn)制數(shù)的算術(shù)運(yùn)算規(guī)則也比十進(jìn)制數(shù)的要簡(jiǎn)單得多,了解到二進(jìn)制數(shù)加法規(guī)則是“逢二進(jìn)一”、減法規(guī)則是“借一當(dāng)二”,再根據(jù)十進(jìn)制數(shù)算術(shù)運(yùn)算的方法,很容易理解和完成二進(jìn)制數(shù)的算術(shù)運(yùn)算。

1)加法運(yùn)算規(guī)則

0+0=0

0+1=1

1+0=1

1+1=0,且向高位產(chǎn)生進(jìn)位1,逢二進(jìn)一

例1.17計(jì)算10110101B+1101001B。

加法過(guò)程如下:

可得

10110101B+1101001B=100011110B

2)減法運(yùn)算規(guī)則

0-0=0

1-0=1

1-1=0

0-1=1,且向高位產(chǎn)生借位1,借一當(dāng)二例1.18計(jì)算10110101B-1101001B。

減法過(guò)程如下:

可得10110101B-1101001B=1001100B

3)乘法運(yùn)算規(guī)則

0×0=0

0×1=0

1×0=0

1×1=1

可見(jiàn),僅當(dāng)兩個(gè)1相乘時(shí)結(jié)果為1,否則結(jié)果為0。因此,二進(jìn)制數(shù)的乘法非常簡(jiǎn)單。

若乘數(shù)位為0,則乘積為0;若乘數(shù)位為1,則乘積結(jié)果等于被乘數(shù)。

例1.19計(jì)算10110B×11001B。乘法過(guò)程如下:

可得

10110B×11001B=1000100110B

二進(jìn)制數(shù)乘法過(guò)程從乘數(shù)的低位開(kāi)始,用乘數(shù)的每一位分別去乘以被乘數(shù),每次相乘所得中間結(jié)果稱(chēng)為部分積,把部分積的最低有效位與相應(yīng)乘數(shù)位對(duì)齊后,同時(shí)相加得到乘積。兩個(gè)8位二進(jìn)制數(shù)相乘,結(jié)果為16位,如果乘積不足16位,則在乘積的前面補(bǔ)0(補(bǔ)足16位)。

4)除法運(yùn)算規(guī)則

0÷1=0

1÷1=1除法運(yùn)算是乘法的逆運(yùn)算,其方法與十進(jìn)制除法是一樣的。

例1.20計(jì)算1110101B÷1001B。

除法過(guò)程如下:

可得1110101B÷1001B=1101B

5)計(jì)算機(jī)中的四則運(yùn)算

二進(jìn)制數(shù)也可完成加、減、乘、除四則運(yùn)算,筆算時(shí),運(yùn)算過(guò)程不但很清楚而且很方便,但對(duì)計(jì)算機(jī)來(lái)說(shuō),實(shí)現(xiàn)起來(lái)很不方便。在計(jì)算機(jī)中二進(jìn)制數(shù)的四則運(yùn)算最終都可以轉(zhuǎn)化為帶符號(hào)的加法運(yùn)算,所以在CPU內(nèi)部只有加法器。可把乘法運(yùn)算通過(guò)部分積右移加被乘數(shù)或0的辦法來(lái)實(shí)現(xiàn),也可采用被乘數(shù)左移加部分積的方法實(shí)現(xiàn),乘法實(shí)質(zhì)上是做移位加法;而除法實(shí)質(zhì)則是做移位減法,把除法運(yùn)算通過(guò)部分余數(shù)左移加除數(shù)補(bǔ)碼來(lái)實(shí)現(xiàn),也可采用被除數(shù)右移加除數(shù)補(bǔ)碼或0的方法來(lái)實(shí)現(xiàn);把減法運(yùn)算通過(guò)加補(bǔ)碼來(lái)實(shí)現(xiàn),其方法是將減數(shù)B變成其補(bǔ)碼后,再與被減數(shù)A相加,其和(如有進(jìn)位的話,則舍去進(jìn)位)就是兩數(shù)之差。補(bǔ)碼將在1.2小節(jié)討論,此處僅對(duì)實(shí)現(xiàn)乘法運(yùn)算加以說(shuō)明。

例1.21計(jì)算1011B×1101B。

被乘數(shù)a=1011乘數(shù)b=1101①乘數(shù)末位b0為1,所以在s的初值0000上加被乘數(shù),得到新部分積,然后部分積向右移一位。②此時(shí)乘數(shù)位為b1=0,所以給部分積加0000,得到新部分積,然后將部分積向右移一位。③此時(shí)乘數(shù)位為b2=1,所以給部分積加被乘數(shù)1011,得到新部分積,然后將部分積向右移一位。④此時(shí)乘數(shù)位為b3=1,所以給部分積加被乘數(shù)1011,得到新部分積,然后將部分積向右移一位。可見(jiàn),4位數(shù)乘4位數(shù)變成了4次相加、4次移位,每次相加都是兩個(gè)4位數(shù)相加。

部分積s

計(jì)算結(jié)果為:1011B×1101B=10001111B

6.二進(jìn)制數(shù)的邏輯運(yùn)算

邏輯表示輸入與輸出的一種因果關(guān)系。用字母和符號(hào)代替文字來(lái)進(jìn)行運(yùn)算推理的方法稱(chēng)為邏輯代數(shù)或布爾代數(shù),也稱(chēng)開(kāi)關(guān)代數(shù)。邏輯代數(shù)和一般代數(shù)不同,一般代數(shù)變量的值是連續(xù)的,而計(jì)算機(jī)中的邏輯關(guān)系是一種二值邏輯,其邏輯代數(shù)中變量的值只有兩個(gè):1和0。盡管在邏輯代數(shù)中某些運(yùn)算規(guī)則和普通代數(shù)相同,但邏輯代數(shù)中的0和1與普通代數(shù)中的數(shù)值0和1不同,它只代表邏輯分析的兩種對(duì)立狀態(tài),不表示數(shù)學(xué)中0和1的數(shù)值大小。邏輯運(yùn)算的特征是對(duì)二進(jìn)制數(shù)按對(duì)應(yīng)位獨(dú)立進(jìn)行運(yùn)算,而和其它位的運(yùn)算結(jié)果無(wú)關(guān),各位之間無(wú)高、低位之分,不存在進(jìn)位和借位關(guān)系,其邏輯運(yùn)算結(jié)果也是邏輯值。

邏輯代數(shù)有三種基本的運(yùn)算關(guān)系:邏輯加法(“或”運(yùn)算)、邏輯乘法(“與”運(yùn)算)、邏輯否定(“非”運(yùn)算或稱(chēng)“反”運(yùn)算)。其它復(fù)雜的組合邏輯關(guān)系都可以由這三種基本邏輯關(guān)系組合而成。下面介紹常用的“與”、“或”、“非”及“異或”四種運(yùn)算。

1)“與”運(yùn)算(AND)

“與”運(yùn)算又稱(chēng)邏輯乘,運(yùn)算符號(hào)可用“AND”、“∧”、“·”或“×”表示,其運(yùn)算規(guī)則如下:

0·0=0

0·1=0

1·0=0

1·1=1

即兩個(gè)邏輯位進(jìn)行“與”運(yùn)算,只要有一位為0,則運(yùn)算結(jié)果為0;只有當(dāng)兩個(gè)邏輯變量都為1時(shí),“與”運(yùn)算結(jié)果才為1。例1.22計(jì)算10011101B∧10111011B。

步驟如下:

結(jié)果:10011101B∧10111011B=10011001B

2)“或”運(yùn)算(OR)

“或”運(yùn)算又稱(chēng)邏輯加,運(yùn)算符號(hào)用“OR”、“∨”或“+”表示,其運(yùn)算規(guī)則如下:

0+0=0

0+1=1

1+0=1

1+1=1

即兩個(gè)邏輯位進(jìn)行“或”運(yùn)算,只要有一位為1,則運(yùn)算結(jié)果就為1;只有當(dāng)兩個(gè)邏輯變量都為0時(shí),“或”運(yùn)算結(jié)果才為0。

例1.23計(jì)算10011001B∨10111011B。

步驟如下:

結(jié)果:10011001B∨10111011B=10111011B

3)“非”運(yùn)算(NOT)

“非”運(yùn)算的運(yùn)算符號(hào)是在邏輯變量上方加一橫線表示,即對(duì)邏輯位求反。其運(yùn)算規(guī)則為按位取反,即1的“非”為0,0的“非”為1。

例1.24求二進(jìn)制數(shù)10010111B的“非”。

對(duì)10010111按位取反即可,運(yùn)算結(jié)果為01101000B。

4)“異或”運(yùn)算(XOR)

“異或”運(yùn)算的運(yùn)算符號(hào)用“”或“”來(lái)表示。其運(yùn)算規(guī)則為:

即兩個(gè)邏輯位進(jìn)行“異或”運(yùn)算時(shí),當(dāng)兩個(gè)邏輯變量取值相同時(shí),它們“異或”的結(jié)果為0;當(dāng)兩個(gè)邏輯變量取值不相同時(shí),它們“異或”的結(jié)果才為1。

例1.25計(jì)算11010011B⊕10100110B。

步驟如下:

結(jié)果:

7.十六進(jìn)制數(shù)的算術(shù)運(yùn)算

十六進(jìn)制數(shù)運(yùn)算的種類(lèi)和二進(jìn)制數(shù)的相同,并且所有運(yùn)算都可以轉(zhuǎn)化為二進(jìn)制數(shù)或十進(jìn)制數(shù)進(jìn)行,經(jīng)計(jì)算后再把所得的結(jié)果轉(zhuǎn)換成十六進(jìn)制數(shù)。當(dāng)然,只要按照逢十六進(jìn)一的規(guī)則,也可以直接用十六進(jìn)制數(shù)來(lái)計(jì)算。

例1.26計(jì)算0B5F0H+0A427H。

加法過(guò)程如下:

結(jié)果:0B5F0H+0A427H=15A17H

注意:進(jìn)行十六進(jìn)制數(shù)加法運(yùn)算時(shí),逢16進(jìn)1,若兩個(gè)一位數(shù)之和M小于16,則和的相應(yīng)位為M本身,若兩個(gè)一位數(shù)之和M大于16,則用M-16來(lái)取代M,同時(shí)向高位進(jìn)1。例1.27計(jì)算0B5F0H-0A427H。

減法過(guò)程如下:

結(jié)果:0B5F0H-0A427H=11C9H

注意:十六進(jìn)制數(shù)減法運(yùn)算與十進(jìn)制數(shù)相類(lèi)似,夠減時(shí),直接相減;不夠減時(shí),從高位借1(相當(dāng)于本位的十進(jìn)制數(shù)16)。例1.28計(jì)算07D5H×5CH。

乘法過(guò)程如下:

結(jié)果:07D5H×5CH=2D08CH

注意:十六進(jìn)制數(shù)乘、除法運(yùn)算沒(méi)有十進(jìn)制數(shù)那種“乘法九九口訣表”,通常先化為二進(jìn)制數(shù)比較方便,但也可直接用十進(jìn)制數(shù)的乘法規(guī)則來(lái)計(jì)算,只是結(jié)果必須轉(zhuǎn)化成十六進(jìn)制數(shù)來(lái)表示。

計(jì)算機(jī)的基本功能是對(duì)數(shù)據(jù)進(jìn)行運(yùn)算和加工處理。數(shù)據(jù)有兩類(lèi),一種是數(shù)值數(shù)據(jù),如8.9、-2.56等;另一種是非數(shù)值數(shù)據(jù)(信息),如A、+、&等。不論是哪種數(shù)據(jù),在計(jì)算機(jī)中都必須用二進(jìn)制代碼來(lái)編碼表示,數(shù)值數(shù)據(jù)的正、負(fù)號(hào)也用二進(jìn)制代碼表示。1.2計(jì)算機(jī)中數(shù)與字符的編碼1.2.1數(shù)值數(shù)據(jù)的編碼及運(yùn)算

1.帶符號(hào)數(shù)的編碼及運(yùn)算規(guī)則

1)機(jī)器數(shù)與真值

計(jì)算機(jī)中的數(shù)值數(shù)據(jù)分為帶符號(hào)數(shù)(有符號(hào)數(shù))和無(wú)符號(hào)數(shù)(不帶符號(hào)數(shù))。在算術(shù)運(yùn)算中,數(shù)據(jù)是有正有負(fù)的,稱(chēng)之為帶符號(hào)數(shù),其最高位表示正、負(fù)符號(hào);若數(shù)據(jù)是非負(fù)的,稱(chēng)之為無(wú)符號(hào)數(shù),其最高位表示數(shù)值。在計(jì)算機(jī)內(nèi)部表示二進(jìn)制數(shù)的方法通常稱(chēng)為數(shù)值編碼,由于計(jì)算機(jī)不能識(shí)別正、負(fù)號(hào),因此計(jì)算機(jī)將正、負(fù)等符號(hào)數(shù)碼化,以便運(yùn)算時(shí)識(shí)別。這種連同正、負(fù)號(hào)數(shù)碼化的采用二進(jìn)制編碼形式表示的數(shù),在計(jì)算機(jī)中統(tǒng)稱(chēng)為機(jī)器數(shù)或機(jī)器碼。機(jī)器數(shù)按一定編碼方式所代表的實(shí)際數(shù)值稱(chēng)為該魘惱嬤(簡(jiǎn)稱(chēng)真值),通常用+、-前綴表示數(shù)的正、負(fù),用十進(jìn)制數(shù)表示數(shù)值的大小。簡(jiǎn)單地說(shuō),把一個(gè)數(shù)在機(jī)器中的表示形式稱(chēng)為機(jī)器數(shù),而這個(gè)數(shù)本身就是該機(jī)器數(shù)的真值。機(jī)器數(shù)的含義有以下兩點(diǎn):

(1)機(jī)器數(shù)所能表示的數(shù)的范圍由計(jì)算機(jī)的字長(zhǎng)來(lái)決定。字長(zhǎng)確定后,機(jī)器數(shù)所表示的數(shù)值的范圍大小被限定。例如,當(dāng)計(jì)算機(jī)使用8位寄存器時(shí),其字長(zhǎng)為8位,所以一個(gè)無(wú)符號(hào)整數(shù)的最大值是:(11111111)B=(255)D,此時(shí)機(jī)器數(shù)的范圍是0~255;當(dāng)使用16位寄存器時(shí),字長(zhǎng)為16位,所以一個(gè)無(wú)符號(hào)整數(shù)的最大值是:(1111111111111111)B=(65535)D,此時(shí)機(jī)器數(shù)的范圍是0~65535。

(2)機(jī)器數(shù)可以是帶符號(hào)數(shù),也可以是無(wú)符號(hào)數(shù)。帶符號(hào)數(shù)是指機(jī)器數(shù)由符號(hào)位和數(shù)值位兩部分組成,且都用二進(jìn)制代碼表示,通常規(guī)定其最高位為符號(hào)位,用來(lái)表示數(shù)的正、負(fù)號(hào),余下位為數(shù)值位,且符號(hào)位為0表示正數(shù),符號(hào)位為1表示負(fù)數(shù)。與帶符號(hào)數(shù)對(duì)應(yīng)的是無(wú)符號(hào)數(shù),無(wú)符號(hào)數(shù)沒(méi)有符號(hào)位,所有位數(shù)全部為數(shù)值位,因此不能表示負(fù)數(shù),只能表示0和正數(shù)。使用8位二進(jìn)制數(shù)D7~D0表示帶符號(hào)數(shù),規(guī)定D7為符號(hào)位,D6~D0為數(shù)值位。同樣對(duì)于16位二進(jìn)制數(shù)D15~D0,規(guī)定D15為符號(hào)位,D14~D0為數(shù)值位。帶符號(hào)數(shù)表示如下:

01011011B=+91,11011011B=-91

上式中等號(hào)左邊為機(jī)器數(shù),等號(hào)右邊為該機(jī)器數(shù)的真值。

注意:8位帶符號(hào)數(shù)和8位無(wú)符號(hào)數(shù)所能表示的數(shù)的范圍是不同的,8位帶符號(hào)正數(shù)的最大值是01111111B,相當(dāng)于十進(jìn)制數(shù)的127;而8位無(wú)符號(hào)數(shù)的最大值是11111111B,相當(dāng)于十進(jìn)制數(shù)的255。為了簡(jiǎn)化二進(jìn)制數(shù)值數(shù)據(jù)的運(yùn)算,機(jī)器數(shù)在計(jì)算機(jī)中有三種常用的編碼表示法:原碼、反碼和補(bǔ)碼。它們共同的特點(diǎn)是都通過(guò)符號(hào)位來(lái)表示數(shù)的正、負(fù),但數(shù)的大小的表示方法是不同的。由于補(bǔ)碼編碼有許多優(yōu)點(diǎn),因此大多數(shù)微機(jī)數(shù)字與字符采用補(bǔ)碼進(jìn)行編碼。

2)原碼表示法

對(duì)一個(gè)二進(jìn)制數(shù)而言,若用最高位為符號(hào)位,規(guī)定正數(shù)的符號(hào)位為0,負(fù)數(shù)的符號(hào)位為1,其余數(shù)值位部分是其絕對(duì)值的二進(jìn)制形式,則稱(chēng)這種表示方法為該二進(jìn)制數(shù)的原碼表示法,這樣得到的機(jī)器數(shù)就是二進(jìn)制數(shù)的原碼。一個(gè)數(shù)X的原碼記為[X]原。

例如,X=+1011100,Y=-1011100,則[X]原=01011100,[Y]原=11011100。其中[X]原和[Y]原分別為X和Y的原碼。

例1.29假設(shè)某機(jī)器為8位機(jī),即一個(gè)數(shù)據(jù)用8位二進(jìn)制來(lái)表示,若X=+23,Y=-23,求[X]原和[Y]原。因?yàn)閄=+23=+0010111B,Y=-23=-0010111B,根據(jù)原碼表示法,有

原碼[X]原和真值X之間的關(guān)系如下:

(1)正數(shù)的原碼表示。設(shè)X=+Xn-2Xn-3…X1X0(即n-1位二進(jìn)制正數(shù)),則X的原碼表示為:

[X]原=0Xn-2Xn-3…X1X0=X(為n位二進(jìn)制數(shù),其中最高位為符號(hào)位)

(2)負(fù)數(shù)的原碼表示。

設(shè)X=-Xn-2Xn-3…X1X0(即n-1位二進(jìn)制負(fù)數(shù)),則X的原碼表示為:[X]原=1Xn-2Xn-3…X1X0

=2n-1+Xn-2Xn-3…X1X0

=2n-1-(-Xn-2Xn-3…X1X0)

=2n-1-X(它也是一個(gè)n位二進(jìn)制數(shù),其中最高位為符號(hào)位)

(3)零的原碼表示。

在二進(jìn)制數(shù)原碼表示中有正零和負(fù)零之分,即真值0的原碼可表示為兩種不同的形式,+0和-0。具體表示為:

[+0]原=000…000B,[-0]原=100…000B(n位二進(jìn)制數(shù),最高位為符號(hào)位)

當(dāng)n=8時(shí)

[+0]原=00000000B=00H,[-0]原=10000000B=80H綜上所述,若二進(jìn)制數(shù)X=Xn-1Xn-2Xn-3…X1X0,則原碼表示的嚴(yán)格定義可用以下數(shù)學(xué)式表示:

(1.2)原碼表示法的優(yōu)點(diǎn)是簡(jiǎn)單直觀,易于理解,且與真值間的轉(zhuǎn)換非常方便,只要將真值中的符號(hào)位數(shù)字化即可。它的缺點(diǎn)是0有兩種表示形式,給使用帶來(lái)了不便;另外,原碼進(jìn)行加、減運(yùn)算時(shí)較麻煩,在使用原碼作兩數(shù)相加時(shí),計(jì)算機(jī)必須對(duì)兩個(gè)數(shù)的符號(hào)是否相同作出判斷,當(dāng)兩數(shù)符號(hào)相同時(shí),則進(jìn)行加法運(yùn)算,否則就要作減法運(yùn)算;而且對(duì)于減法運(yùn)算要比較出兩個(gè)數(shù)的絕對(duì)值大小,然后從絕對(duì)值大的數(shù)中減去絕對(duì)值小的數(shù)而得其差值,差值的符號(hào)取決于絕對(duì)值大的數(shù)的符號(hào)。為了完成這些操作,計(jì)算機(jī)的結(jié)構(gòu),特別是控制電路隨之復(fù)雜化,而且運(yùn)算速度也變得較低。為此在微機(jī)中都不采用原碼形式表示數(shù),而引進(jìn)了反碼表示法和補(bǔ)碼表示法。

原碼表示的整數(shù)范圍是:-(2n-1-1)~+(2n-1-1),其中n為機(jī)器字長(zhǎng)。則一個(gè)字節(jié)所表示的8位二進(jìn)制原碼表示的數(shù)據(jù)范圍為-127~+127,16位二進(jìn)制原碼表示的數(shù)據(jù)范圍為-32767~+32767。

3)反碼表示法

反碼表示的帶符號(hào)數(shù),也是把最高位規(guī)定為符號(hào)位。對(duì)于正數(shù),它的反碼與其原碼相同(最高位為0表示正數(shù),其余數(shù)值位是正數(shù)的絕對(duì)值)。對(duì)于負(fù)數(shù),其反碼用對(duì)應(yīng)正數(shù)的原碼連同符號(hào)位在內(nèi)按位取反來(lái)求得,取反的含義就是將0變?yōu)?,將1變?yōu)?。也可以認(rèn)為,負(fù)數(shù)的反碼表示為負(fù)數(shù)的原碼除符號(hào)位外其余各數(shù)值位按位取反。可見(jiàn),正數(shù)和負(fù)數(shù)的符號(hào)位與原碼定義都相同。一個(gè)數(shù)X的反碼記為[X]反。例1.30假設(shè)某機(jī)器為8位機(jī),若X=+31,Y=-31,求[X]反和[Y]反。

因?yàn)閄=+31=+0011111B,Y=-31=-0011111B,則有

[X]原=00011111B=1FH

[X]反=[X]原=00011111B=1FH

[Y]原=10011111B=9FH

[Y]反=11100000B=0E0H

可見(jiàn),若X為8位帶符號(hào)二進(jìn)制數(shù)的真值,則[X]反

+[-X]反=11111111B=FFH。即對(duì)于n位帶符號(hào)二進(jìn)制數(shù),有[X]反+[-X]反=2n-1。

反碼[X]反和真值X之間的關(guān)系如下:

(1)正數(shù)的反碼表示。

設(shè)X=+Xn-2Xn-3…X1X0(即n-1位二進(jìn)制正數(shù)),則X的反碼表示為:

[X]反=[X]原=0Xn-2Xn-3…X1X0=X(為n位二進(jìn)制數(shù),其中最高位為符號(hào)位)

(2)負(fù)數(shù)的反碼表示。

設(shè)X=-Xn-2Xn-3…X1X0(即n-1位二進(jìn)制負(fù)數(shù)),則X的反碼表示為:

(3)零的反碼表示。

同原碼一樣,在反碼表示法中也有正零和負(fù)零之分,即真值0的反碼可表示為兩種不同的形式,+0和-0。具體表示為:

[+0]反=000…000B,[-0]反=111…111B(為n位二進(jìn)制數(shù),最高位為符號(hào)位)

當(dāng)n=8時(shí)[+0]反=00000000B=00H,[-0]反=11111111B=FFH。

綜上所述,若二進(jìn)制數(shù)X=Xn-1Xn-2Xn-3…X1X0,則反碼表示的嚴(yán)格定義可用以下數(shù)學(xué)式表示:

(1.3)反碼表示的數(shù)字范圍同原碼相同,為-(2n-1-1)~+(2n-1-1),其中n為機(jī)器字長(zhǎng)。8位二進(jìn)制反碼表示的真值范圍為-127~+127;16位反碼表示的真值范圍為-32767~+32767。由于反碼中0的表示不唯一,使得用起來(lái)很不方便,所以在微型計(jì)算機(jī)里反碼用的很少。

4)補(bǔ)碼表示法

二進(jìn)制補(bǔ)碼表示法,是現(xiàn)在最普遍、最重要和應(yīng)用最廣泛的整數(shù)表示法。補(bǔ)碼表示的機(jī)器數(shù),其符號(hào)位能和有效數(shù)值部分一起參加數(shù)值計(jì)算,從而簡(jiǎn)化運(yùn)算規(guī)則,節(jié)省運(yùn)算時(shí)間;當(dāng)進(jìn)行二進(jìn)制減法時(shí),可利用補(bǔ)碼將減法運(yùn)算轉(zhuǎn)換成加法運(yùn)算,而乘法和除法運(yùn)算通過(guò)移位和相加可實(shí)現(xiàn),這樣可以使運(yùn)算電路結(jié)構(gòu)得到簡(jiǎn)化。

在討論補(bǔ)碼之前先介紹模(或模數(shù))的概念。我們把一個(gè)事物的循環(huán)周期的長(zhǎng)度叫做這個(gè)事物的?;蚰?shù)(module)。換言之,模是一個(gè)計(jì)數(shù)系統(tǒng)所能表示的最大量程(即最大容量),其大小K等于以進(jìn)位計(jì)數(shù)制基數(shù)為底,以位數(shù)為指數(shù)的冪。凡是用器件進(jìn)行的運(yùn)算都是有模運(yùn)算,運(yùn)算結(jié)果超過(guò)模的部分被運(yùn)算器自動(dòng)丟棄(對(duì)二進(jìn)制而言,即高位的進(jìn)位被丟棄;對(duì)十進(jìn)制而言,相當(dāng)于模自動(dòng)丟棄)。例如,在鐘表上,指針正撥12小時(shí)或倒撥12小時(shí),其所得時(shí)間值都和原時(shí)間相同,即在鐘表上X=X+12=X-12(mod12),因此12為鐘表的模。補(bǔ)碼是根據(jù)同余的概念得出的。由同余的概念可知,對(duì)一個(gè)數(shù)X,有以下關(guān)系

X+NK=X(modK) (1.4)式中K為模,N為任意整數(shù)。在模的意義下,數(shù)X與該數(shù)本身加上其模的任意整數(shù)倍之和相等。當(dāng)數(shù)Z和Y滿足

Z=NK+Y

時(shí),稱(chēng)Z和Y互為補(bǔ)數(shù)。通常N取1,也可以取其它整數(shù)。兩個(gè)互為補(bǔ)數(shù)的數(shù),實(shí)際上代表同一個(gè)事物。例如,要將鐘表從8點(diǎn)整調(diào)整到6點(diǎn)整,校準(zhǔn)的方法是正撥10小時(shí)或倒撥2小時(shí),結(jié)果都正確,用式子寫(xiě)出來(lái),即:

8+10=6(mod12)順撥

8-2=6(mod12)倒撥

這里10對(duì)模12來(lái)說(shuō)就是-2的補(bǔ)數(shù),因此可用12-2=10來(lái)求-2的補(bǔ)碼,補(bǔ)碼可以將負(fù)數(shù)轉(zhuǎn)換成正數(shù)。一個(gè)數(shù)X的補(bǔ)碼記為[X]補(bǔ)。

對(duì)一個(gè)n位二進(jìn)制數(shù),若N=1且以2n為模,則它的補(bǔ)碼叫做2補(bǔ)碼,2補(bǔ)碼簡(jiǎn)稱(chēng)補(bǔ)碼。若二進(jìn)制數(shù)X=Xn-1Xn-2Xn-3…X1X0,則補(bǔ)碼表示的定義為

(1.5)

同理,一個(gè)十進(jìn)制數(shù),若以10n為模,它的補(bǔ)碼叫做10補(bǔ)碼。而一個(gè)n位二進(jìn)制數(shù),若以2n-1為模,它的補(bǔ)碼叫做1補(bǔ)碼。2n-1實(shí)際上就是n個(gè)1,即111…11,這是1補(bǔ)碼的由來(lái)。1補(bǔ)碼也稱(chēng)反碼,即[X]反=2n-1+X,它是以2n-1為模。根據(jù)[X]補(bǔ)及[X]反的定義式,可得如下關(guān)系:

當(dāng)X為正數(shù)時(shí),有[X]補(bǔ)=[X]反=[X]原=X

當(dāng)X為負(fù)數(shù)時(shí),有[X]補(bǔ)=[X]反+1

用補(bǔ)碼表示帶符號(hào)數(shù),其最高位為符號(hào)位,其余為數(shù)值位。正數(shù)的補(bǔ)碼同其原碼、反碼相同,就是它所表示的數(shù)的真值。只有負(fù)數(shù)才有求補(bǔ)的問(wèn)題,嚴(yán)格地說(shuō),“補(bǔ)碼表示法”應(yīng)稱(chēng)為“負(fù)數(shù)的補(bǔ)碼表示法”。負(fù)數(shù)的補(bǔ)碼就是機(jī)器數(shù)符號(hào)位保持不變,其余數(shù)值位按位取反后末位加1;換言之,負(fù)數(shù)的補(bǔ)碼就是其反碼加1,即在其反碼的最低位上加1得到。負(fù)數(shù)的補(bǔ)碼部分不是它所示的數(shù)的真值。例1.31假設(shè)某機(jī)器為8位機(jī),若X=+76,Y=-76,求[X]補(bǔ)和[Y]補(bǔ)。

因?yàn)閄=+76=+1001100B,Y=-76=-1001100B,則有

[X]補(bǔ)=[X]反=[X]原=01001100B=4CH

[Y]補(bǔ)=[Y]反+1=10110011B+1=10110100B=0B4H例1.32假設(shè)某機(jī)器為16位機(jī),若X=+76,Y=-76,求[X]補(bǔ)和[Y]補(bǔ)。

因?yàn)閄=+76=+000000001001100B,Y=-76=-000000001001100B,則有

[X]補(bǔ)=0000000001001100B=004CH

[Y]補(bǔ)=[Y]反+1=1111111110110011B+1=1111111110110100B=0FFB4H計(jì)算機(jī)中為了擴(kuò)大數(shù)的表示范圍,常用兩個(gè)機(jī)器字表示一個(gè)機(jī)器數(shù),把32位數(shù)稱(chēng)為雙字長(zhǎng)數(shù)或雙精度數(shù),其表示范圍是-231≤N≤231-1。位數(shù)擴(kuò)展指一個(gè)數(shù)從較少位擴(kuò)展到較多位,用補(bǔ)碼表示的數(shù)在擴(kuò)展時(shí)只需要進(jìn)行符號(hào)位擴(kuò)展,數(shù)值位不變。正數(shù)是在符號(hào)的前面補(bǔ)0,負(fù)數(shù)是在符號(hào)的前面補(bǔ)1。在補(bǔ)碼表示法中,數(shù)0的補(bǔ)碼表示是唯一的。由補(bǔ)碼的定義,可知

[+0]補(bǔ)=[+0]原=[+0]反=00000000B=00H

[-0]補(bǔ)=[-0]反+1=11111111B+1=100000000B=00000000B=00H

對(duì)于8位二進(jìn)制數(shù),最高位的進(jìn)位(28)按模256運(yùn)算被“自然丟失”。所以

[+0]補(bǔ)=[-0]補(bǔ)=00000000B

另外需要注意的是,對(duì)于8位二進(jìn)制數(shù)10000000這個(gè)補(bǔ)碼編碼,其真值被定義為-128,而10000000在原碼中表示真值-0、在反碼中表示真值-127;對(duì)無(wú)符號(hào)數(shù)表示128。

補(bǔ)碼表示的數(shù)值范圍和原碼及反碼不同,其數(shù)值范圍為-2n-1~+(2n-1-1),其中n為機(jī)器字長(zhǎng)。8位二進(jìn)制補(bǔ)碼表示的真值范圍為-128~+127;16位反碼表示的真值范圍為-32768~+32767。當(dāng)運(yùn)算結(jié)果超出數(shù)值范圍時(shí),數(shù)據(jù)就不正確了,稱(chēng)為溢出。溢出和進(jìn)位不同,出現(xiàn)溢出時(shí),由溢出產(chǎn)生的進(jìn)位或借位將自然丟失。

8位二進(jìn)制數(shù)的原碼、反碼、補(bǔ)碼及無(wú)符號(hào)數(shù)的對(duì)應(yīng)關(guān)系如表1.2所示。表1.28位二進(jìn)制數(shù)的原碼、反碼、補(bǔ)碼及無(wú)符號(hào)數(shù)的對(duì)應(yīng)關(guān)系

5)真值與機(jī)器數(shù)之間的轉(zhuǎn)換

前面介紹了真值轉(zhuǎn)換為原碼、反碼和補(bǔ)碼的方法。下面將簡(jiǎn)單介紹如何用機(jī)器數(shù)求真值,以及補(bǔ)碼如何轉(zhuǎn)換成原碼和反碼。

(1)原碼轉(zhuǎn)換成真值。

根據(jù)原碼的定義,將原碼的數(shù)值位各位按權(quán)展開(kāi)求和,由符號(hào)位決定數(shù)的正負(fù)即可由原碼求出真值。例1.33已知[X]原=00010111B,[Y]原=10010001B,求X和Y的真值。

X=+0010111B=1×24+1×22+1×21+1×20=+23

Y=-0010001B=-(1×24+1×20)=-17

(2)反碼轉(zhuǎn)換成真值。

若要求反碼的真值,首先要求出反碼對(duì)應(yīng)的原碼,再按上述原碼轉(zhuǎn)換為真值的方法即可求出其真值。一個(gè)二進(jìn)制反碼表示的數(shù),最高位為符號(hào)位,當(dāng)符號(hào)位為“0”(即正數(shù))時(shí),它的原碼同反碼一樣。當(dāng)符號(hào)位為“1”(即負(fù)數(shù))時(shí),則應(yīng)在反碼的基礎(chǔ)上,保持符號(hào)位不變,同時(shí)其數(shù)值位按位取反(實(shí)際上就是對(duì)表示負(fù)數(shù)的反碼再次求反),這樣就得到了它的原碼。

例1.34已知[X]反=00010111B,[Y]反=10010001B,求X和Y的真值。

[X]原=[X]反=00010111B

[Y]原=11101110B

X=+0010111B=1×24+1×22+1×21+1×20=+23

Y=-1101110B=-(1×26+1×25+1×23+1×22+1×21)=-110

(3)補(bǔ)碼轉(zhuǎn)換成真值。

同理,要求補(bǔ)碼的真值,首先要求出補(bǔ)碼對(duì)應(yīng)的原碼。正數(shù)的補(bǔ)碼和原碼相同。負(fù)數(shù)的補(bǔ)碼求原碼有兩種方法:方法一是采用原碼求補(bǔ)碼的逆過(guò)程,即先將負(fù)數(shù)補(bǔ)碼的數(shù)值位減1(實(shí)現(xiàn)將補(bǔ)碼轉(zhuǎn)換為反碼),然后再將數(shù)值位按位取反;方法二與原碼求補(bǔ)碼的步驟一致,即對(duì)補(bǔ)碼[X]補(bǔ)再求一次補(bǔ),就是將[X]補(bǔ)除符號(hào)位外取反加1可得到它的原碼。這是因?yàn)閷?duì)于二進(jìn)制數(shù)來(lái)說(shuō),先減1再取反和先取反再加1的結(jié)果是一樣的。

這種關(guān)系可以表示為:

[[X]補(bǔ)]補(bǔ)=[X]原

例1.35已知[X]補(bǔ)=01001100B,[Y]補(bǔ)=10110100B,求X和Y的真值。

[X]原=[X]補(bǔ)=01001100B

[Y]原=[[Y]補(bǔ)]補(bǔ)=[10110100]補(bǔ)=11001011+1=11001100B

X=+1001100B=1×26+1×23+1×22=+76

Y=-1001100B=-(1×26+1×23+1×22)=-76

6)補(bǔ)碼的運(yùn)算

數(shù)據(jù)在計(jì)算機(jī)中以一定的編碼方式表示,不同的編碼具有不同的運(yùn)算規(guī)則。原碼的運(yùn)算類(lèi)同于筆算,雖然直觀,但計(jì)算機(jī)處理過(guò)程非常繁瑣,要求計(jì)算機(jī)的結(jié)構(gòu)極為復(fù)雜。由于浮點(diǎn)數(shù)的有效數(shù)字常用原碼表示,所以二進(jìn)制除法運(yùn)算時(shí),多用原碼表示法。反碼運(yùn)算很不方便,已很少用在算術(shù)運(yùn)算中,僅在求反邏輯運(yùn)算時(shí)使用。在微型計(jì)算機(jī)中,帶符號(hào)數(shù)一般都采用補(bǔ)碼形式在機(jī)器中存放和進(jìn)行運(yùn)算。當(dāng)兩個(gè)二進(jìn)制數(shù)進(jìn)行補(bǔ)碼加、減運(yùn)算時(shí)無(wú)需判斷數(shù)的正、負(fù),一方面可以使符號(hào)位與數(shù)值位一起參加運(yùn)算,并同時(shí)獲得結(jié)果(運(yùn)算的結(jié)果仍為補(bǔ)碼,包括符號(hào)位和數(shù)值位);另一方面還可以將兩數(shù)差的補(bǔ)碼變?yōu)闇p數(shù)負(fù)數(shù)的補(bǔ)碼與被減數(shù)補(bǔ)碼相加來(lái)實(shí)現(xiàn),即補(bǔ)碼減法運(yùn)算可以轉(zhuǎn)換為加法運(yùn)算。因此,一般計(jì)算機(jī)中只設(shè)置加法器,減法運(yùn)算都是通過(guò)適當(dāng)求補(bǔ),然后通過(guò)相加來(lái)實(shí)現(xiàn)的。然而,采用補(bǔ)碼法表示數(shù)時(shí),最大的缺點(diǎn)是其表示方法與人們習(xí)慣的表示法不一致。因而,從它的表示形式來(lái)判斷一個(gè)數(shù)真值的大小很易出錯(cuò)。例如,若X=+10010B=+18,Y=-10010B=-18,則[X]補(bǔ)=010010B,[Y]補(bǔ)=101110B,故很容易按人們的習(xí)慣表示法判斷出101110B大于010010B(即-18>+18)而出錯(cuò)。

(1)補(bǔ)碼的加法運(yùn)算。

不論兩個(gè)n位二進(jìn)制數(shù)X和Y是正數(shù)還是負(fù)數(shù),可以證明這兩個(gè)數(shù)之和的補(bǔ)碼等于該兩數(shù)的補(bǔ)碼之和。即補(bǔ)碼的加法運(yùn)算規(guī)則為:

[X+Y]補(bǔ)=[X]補(bǔ)+[Y]補(bǔ)

(1.6)

兩個(gè)帶符號(hào)數(shù)X、Y的補(bǔ)碼加法運(yùn)算的步驟如下:

①將帶符號(hào)數(shù)用補(bǔ)碼表示,即將X變換為[X]補(bǔ),Y變換為[Y]補(bǔ);

②對(duì)兩個(gè)補(bǔ)碼進(jìn)行加法運(yùn)算。若最高位上有進(jìn)位,則自然丟失不要;

③判斷結(jié)果是否溢出。如果溢出,則這次運(yùn)算結(jié)果不正確;

④采用補(bǔ)碼運(yùn)算的結(jié)果也是補(bǔ)碼。若沒(méi)有溢出,則對(duì)結(jié)果求補(bǔ)碼,求出對(duì)應(yīng)的真值。

例1.36試用補(bǔ)碼運(yùn)算求[+66]補(bǔ)+[+51]補(bǔ),[+66]補(bǔ)+[-51]補(bǔ),[-66]補(bǔ)+[+51]補(bǔ),[-66]補(bǔ)+[-51]補(bǔ)。

先將真值變成補(bǔ)碼:

[+66]補(bǔ)=01000010B,[+51]補(bǔ)=00110011B

[-66]補(bǔ)=10111110B,[-51]補(bǔ)=11001101B

計(jì)算[+66]補(bǔ)+[+51]補(bǔ):

由于

[+66]補(bǔ)+[+51]補(bǔ)=[(+66)+(+51)]補(bǔ)=[+117]補(bǔ)=01110101B

其結(jié)果為正數(shù),所以可直接求原碼和真值。因此,有

[(+66)+(+51)]原

=[(+66)+(+51)]補(bǔ)=01110101B

真值為

+1110101B=+117計(jì)算結(jié)果正確。

計(jì)算[+66]補(bǔ)+[-51]補(bǔ):

由于

[+66]補(bǔ)+[-51]補(bǔ)=[(+66)+(-51)]補(bǔ)

=[+15]補(bǔ)=00001111B

其結(jié)果為正數(shù),所以可直接求原碼和真值。因此,有

[(+66)+(-51)]原

=[(+66)+(-51)]補(bǔ)=00001111B

真值為

+0001111B=+15

計(jì)算結(jié)果正確。

計(jì)算[-66]補(bǔ)+[+51]補(bǔ):

由于

[-66]補(bǔ)+[+51]補(bǔ)=[(-66)+(+51)]補(bǔ)

=[-15]補(bǔ)=11110001B

其結(jié)果為負(fù)數(shù),所以可求出原碼為

[(-66)+(+51)]原=[[(-66)+(+51)]補(bǔ)]補(bǔ)=10001110B+1=10001111B

真值為

-0001111B=-15

計(jì)算結(jié)果正確。

計(jì)算[-66]補(bǔ)+[-51]補(bǔ):

由于

[-66]補(bǔ)+[-51]補(bǔ)=

[(-66)+(-51)]補(bǔ)=[-117]補(bǔ)=10001011B

其結(jié)果為負(fù)數(shù),所以可求出原碼為

[(-66)+(-51)]原=[[(-66)+(-51)]補(bǔ)]補(bǔ)

=11110100B+1=11110101B

真值為

-1110101B=-117

計(jì)算結(jié)果正確。

可見(jiàn),不論被加數(shù)、加數(shù)是正是負(fù),只要用它們的補(bǔ)碼直接相加,當(dāng)結(jié)果不超出補(bǔ)碼所表示的范圍時(shí),計(jì)算結(jié)果便是正確的補(bǔ)碼形式。當(dāng)計(jì)算結(jié)果超出補(bǔ)碼表示的范圍時(shí),結(jié)果就不正確,這種情況稱(chēng)為溢出。

在計(jì)算中,當(dāng)最高位向更高位產(chǎn)生進(jìn)位時(shí),由于機(jī)器字長(zhǎng)的限制使符號(hào)位產(chǎn)生的進(jìn)位自然丟失,但其結(jié)果不受影響,依然是正確的。

(2)補(bǔ)碼的減法運(yùn)算。

兩個(gè)n位二進(jìn)制數(shù)之差的補(bǔ)碼等于該兩數(shù)的補(bǔ)碼之差。即補(bǔ)碼的減法運(yùn)算規(guī)則是:

[X-Y]補(bǔ)=[X]補(bǔ)-[Y]補(bǔ)=[X]補(bǔ)+[-Y]補(bǔ)

(1.7)

由式(1.7)可見(jiàn),補(bǔ)碼減法運(yùn)算時(shí),也可以利用加法的基本公式,這樣就可以將補(bǔ)碼的減法運(yùn)算轉(zhuǎn)化成加法運(yùn)算。已知[Y]補(bǔ),求[-Y]補(bǔ)的方法是將[Y]補(bǔ)各位按位取反(包括符號(hào)位在內(nèi))后末位加1。兩個(gè)帶符號(hào)數(shù)X、Y的補(bǔ)碼減法運(yùn)算的步驟如下:

①將帶符號(hào)數(shù)用補(bǔ)碼表示,即將X變換為[X]補(bǔ),Y變換為[Y]補(bǔ);

②對(duì)兩個(gè)補(bǔ)碼進(jìn)行減法運(yùn)算。若最高位上有進(jìn)位(或借位),則自然丟失不要;

③判斷結(jié)果是否溢出。如果溢出,則這次運(yùn)算結(jié)果不正確;

④采用補(bǔ)碼運(yùn)算的結(jié)果也是補(bǔ)碼。若沒(méi)有溢出,則對(duì)結(jié)果求補(bǔ)碼,求出對(duì)應(yīng)的真值。例1.37試用補(bǔ)碼運(yùn)算求[+76]補(bǔ)-[+51]補(bǔ),[+76]補(bǔ)-[-51]補(bǔ),[-76]補(bǔ)-[+51]補(bǔ),[-76]補(bǔ)-[-51]補(bǔ)。

先將真值變成補(bǔ)碼:

[+76]補(bǔ)=01001100B,[+51]補(bǔ)=00110011B

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論