1.3 算術運算和邏輯運算


1. 算術運算要點

(1)移位操作

① 原碼移位:原碼進行算術左移和算術右移都不改變原碼本身形態。左移一位相當於乘以 2,右移一位相當於除以 2,移位出現的空位補 0。這是因為原碼與二進制數真值的絕對值是完全一樣的,算術移位並不涉及數的符號。

② 補碼移位:由於正數的補碼與原碼是一樣的,所以正數的補碼左、右移位所出現的空位補 0 均不會改變補碼的形態。值得注意的是負數補碼的移位,當負數的補碼右移時所出現的空位必須補 1 才能保證數值的正確及形體的保持。

③ 反碼移位:由於正數的反碼與原碼相同,所以正數的反碼左移一位相當於乘以2,左移出現的空位補 0,右移一位相當於除以 2,右移出現的空位補 0。負數的反碼左移一位相當於乘以 2,右移一位相當於除以 2,但左、右移位出現的空位必須補 1。

(2)不同編碼下的規格化數

浮點數是由數的階碼和數的尾數構成的。令數的尾數為 image_thumb11[1],則浮點規格化數的標准為 image_thumb31。規格化數的這一要求是從尾數的真值划定的標准,即要求尾數的絕對值大於或等於 image_thumb5(相當於二進制數的 image_thumb7)。

正數的規格化數無論是哪種編碼,其尾數的最高位均為 1;負數的規格化數除原碼外,其他編碼尾數的最高位均為 0。

(3)溢出判斷

定點運算、浮點運算都會遇到溢出的問題,這是因為計算機中的運算是在一個有限制的空間進行的,當運算結果出現大於空間所允許的最大值時,則會出現上溢溢出;當運算結果出現小於空間所允許的最小值時,則會出現下溢溢出。計算機把引起上溢溢出的值稱為機器無窮大,把引起下溢溢出的值稱為機器零。

浮點數是由階和尾數構成的,浮點運算的溢出與否是由結果的階來決定的,當運算結果的階出現大於或小於計算機所容許的最大、最小值時,則會發生上溢或下溢溢出。由於浮點數的階是一個定點正數,且為 2 的指數,所以判定浮點運算可由階所表示的量值給出。

定點加法、減法采用補碼求和的運算方法,判斷運算中的溢出有兩種辦法:一種是利用進位值,另一種是利用符號狀態。進位判斷溢出是檢查尾數最高位的進位與符號位的進位是否相同,若相同表明沒有溢出,若不同表明發生了溢出。

采用變形補碼求和是借助兩個符號的組合狀態判定是否溢出。兩個符號有 4 種組合狀態:00、01、10、11。當組合狀態為 01 或者 10 時,表示運算發生了溢出。

(4)舍入及誤差

由於運算收到操作空間的限制,在運算中出現舍入是在所難免的,而舍入必然會帶來誤差。因此,怎樣處理舍入使得誤差最小是把握運算結果的問題之一。分析誤差的大小,確保運算結果的精確度是把握運算結果的又一問題。

對於一個 n + 1 位的運算結果 0.100000001,放入一個 n 位的單元中,必然會出現因截尾而產生誤差。這種誤差被稱為截斷誤差。

為了提高運算結果的精度,減少誤差,通常采用舍入處理。常用的舍入處理有兩種。一種是“0 舍 1 入”,即被舍掉的位為 1 則在其上一位進 1;舍掉的位為 0,則不進 1。

另一種舍入處理是采取“恆 1”的方法,即不管舍去的是何值,均在尾數的最低位置 1。

分析誤差的方法有兩種:一種是計算絕對誤差,另一種是計算相對誤差。

2. 邏輯運算要點

邏輯運算分為基本邏輯運算和復合邏輯運算。基本邏輯運算有與、或、非 3 種運算,復合邏輯運算有與或運算、與非運算、與或非運算、異或運算、同或運算 6 種。利用邏輯運算可以建立邏輯變量,和邏輯函數的邏輯表達式,用以描寫、刻畫邏輯關系,解決實際邏輯問題。基本邏輯運算和復合邏輯運算也都是由邏輯自變量與因度量的邏輯函數表達式給出的。令 A、B 為邏輯自變量,F 為邏輯函數,則邏輯關系如表 1-15 所示。

image_thumb2

邏輯運算的重要工具是真值表,真值表可以把邏輯變量與邏輯函數的取值用一張表全部開列出來。由於一個自變量有 0、1 兩種取值,兩個自變量則有 image_thumb4 種取值組合,3個自變量有 image_thumb6種取值組合,所以兩個變量的函數表達式對應的真值表為 4 行,3 個自變量的真值表為 8 行,n 個自變量的真值表為 image_thumb8 行。

真值表作為邏輯運算的工具,它還可以證明兩個函數的相互關系。若兩個函數的真值表相同,那么兩個函數相等,原函數與反函數的真值表的函數值往往相反。

掌握基本邏輯關系和邏輯定理、定律才能較好地化簡邏輯表達式,而化簡邏輯表達式是邏輯電路設計的重要環節。

邏輯運算來源於實踐,它必然可以指導實踐,借助邏輯運算可以完成各種應用問題,除用其設計邏輯電路,解決生產、生活中的諸多邏輯問題外,還可以進行數據處理、碼制變換、代碼轉換等。有關應用舉例如下。

① 邏輯截取:使用與運算,選擇適當的邏輯常數可以在已知信息中截取一部分信息。例如把定點數的符號與尾數分開,截取浮點數的階碼等。

② 碼制轉換:使用異或運算或者同或運算,選擇適當的邏輯常數,可以把原碼變為反碼,把補碼變為移碼。

③ 代碼轉換:使用或運算,選擇適當的邏輯常數可以把 0~9 的 BCD 碼變成字符的 ASCII 碼。使用與運算可以把字符數字變成相應的數字。例如把字符‘9’變成數值 9。

此外,使用邏輯運算還可以求負數的絕對值,確定乘積或者商的符號,構造奇、偶校驗碼等。

難點分析

1. 算術運算

1)概述

在計算機內進行加、減、乘、除等運算,由於運算環境的不同,操作數的形式不同,使得在運算中出現了不少新問題,也表現出了以下新特點:

第一,由於運算空間的限制,運算中會出現誤差的問題。例如,在 8 位的運算空間里,如果得到一個 9 位數的計算結果就會因為丟掉一位而產生截斷誤差,從而影響記數結果的精度。

第二,當運算空間恆定后,空間所能容納數的范圍也被限定了。一旦在運算中出現過大或者過小的計算結果就會發生越界而產生出溢出問題,繼而引起”中斷“計算的問題。

第三,在計算機中,參與運算的數是二進制數,利用運算器的左、右移位可以方便地進行乘、除法運算。

第四,由於數有原碼、反碼、補碼、移碼等多種形式,按照不同編碼的特點,常用的算術運算有補碼加、減運算,原碼乘、除運算等。按照數的形式有定點運算、浮點運算等。但不管哪種運算都需要考慮運算結果的符號問題、運算中的溢出判斷問題等。

2)補碼加、減運算

(1)運算方法

引入補碼可以把減法運算變為加法運算。使用補碼求和的運算方法可以把加法和減法統一為加法,且適用於定點小數和定點整數運算。補碼求和的運算方法如下:

加法: image_thumb10

減法: image_thumb121

(2)判定溢出的方法

使用運算中的兩個進位值的狀態組合,可以判定出運算中的溢出。令 image_thumb141 表示尾數高位向符號位的進位,image_thumb16 為符號位在運算中的進位,則溢出判定如表 1-18 所示。

image_thumb19

3)變形補碼加減運算

使用變形補碼進行加、減運算是用兩數的變形補碼求和(有人稱為雙符號運算),同樣是把加法和減法統一為加法,最后的運算結果為變形補碼和。在運算后,用兩個符號位的狀態判定運算是否正常。

4)原碼一位乘法(P57)

5)原碼一位除法(P58)

6)浮點數的加減運算

浮點數是由階碼和尾數組成的,浮點數的加減運算只需要對兩個操作數的尾數進行運算。為了使尾數在相同的位權下對位操作,在操作前需要通過對階使二數的階碼相等,然后再進行尾數的加減操作。為了使操作結果規范化,對加減后的結果還需進行規格化處理。在有限的操作空間里進行加減及左、右移位,可能出現舍去低位的問題,為了保證運算結果精度,在運算中還需要考慮采用哪種舍入處理。此外,運算中是否發生了結果越界而出現溢出也是運算的重要環節。概括起來,浮點數的加減運算需要進行對階、尾數運算、規格化、舍入處理及溢出判斷等步驟。

7)浮點數的乘除運算

①浮點數乘法:二浮點數相乘,尾數相乘,階碼相加,乘積的符號用兩個操作數符號的異或得出。在相乘過程中也需要處理舍入,判斷溢出,對乘積進行規格化等。

②浮點數除法:二浮點數相除,商的尾數由被除數的尾數除以除數的尾數產生,商的階碼由被除數的階碼減除數的階碼得出,而商的符號由二操作數符號的“異或”結果確定。

2. 邏輯運算

1)邏輯運算概述

邏輯運算是對二值變量進行的運算,所謂二值變量是指只有 0、1 兩個值的變量。

2)基本邏輯運算

(1)與運算

與運算所描寫的是兩個(或多個)並列條件決定某一事物成立與否的問題。例如,兩個串聯的開關控制一盞電燈,電燈亮與不亮取決於兩個開關的狀態。若把開關接通定義為 1,把開關斷開定義為 0,電燈亮定義為 1,不亮定義為 0,這樣,兩個串聯開關控制一盞電燈的問題就成了一個二值變量的操作問題。由於兩個開關有 4 種狀態組合,而使其所控制的電燈產生“亮”與“不亮”的兩種結果,於是可以把兩個開關和一盞電燈的狀態用二值變量來描寫,並可以用一張表把兩個開關和一盞電燈的狀態展示出來。這張表被稱為真值表。

“∧”和“•”為與運算的運算符,書寫中還可以省略。概括上述運算規則,可以用一句話來表述:“兩端同時為 1,結果為 1,否則為 0”,即只有在操作符的兩端同時為 1 時,結果才為 1。與運算的法則准確地表述出只有兩個並列條件同時成立時,事物才能成立的邏輯關系。

與運算有“截取信息”的功能,截取信息需借助適當的邏輯常數,這個邏輯常數是對應截取的信息位設定為 1,不截取的信息位設定為 0,該常數被稱為“邏輯尺”。利用與運算的邏輯尺可以自如地分離信息、截取信息,它是信息處理的重要工具之一。

(2)或運算

或運算所描寫的是由兩個或多個條件決定某一事物是否成立,且當有其中一個條件成立就可以使事物成立的邏輯關系。例如,兩個並聯的開關控制一個電燈,只要有其中一個開關接通,電燈就可以亮的事物就是或運算的依據。像分析與運算一樣, 把開關看成是自變量,把電燈看成是函數,兩個開關有 4 種組合狀態,分別作用在電燈上,使其產生亮與不亮的兩種結果。將自變量與函數的對應關系列成一張表,這就是或運算的真值表。

  “∨”、“+”為或運算的運算符。或運算的運算法則也可以概括為一句話,即“有 1 為 1,否則為 0”。

(3)非運算

非運算所描寫的是當條件成立時,事物反而不成立;當條件不成立時,事物反而成立的客觀現實。約定“有為 1,沒有為 0”。其運算法則為:當 Y = 1 時,image_thumb1 ,即 F = 0;當 Y = 0 時,image_thumb3,即 F = 1。

3)符合邏輯運算

異或運算的法則可以概括為一句話:“相異為 1,否則為 0”;而同或運算為:“相同為 1,否則為 0”.

4)基本邏輯關系

在邏輯代數中有兩個邏輯常數,即 0 和 1.邏輯常數與任意一個邏輯變量(假設為 A)有如下基本關系;

image_thumb12

這些基本關系是邏輯表達式化簡的工具。

5)邏輯代數定律

邏輯代數也像普通代數一樣有許多定律,利用這些定律可以對邏輯表達式進行變換、化簡。每一個邏輯表達式都可以用真值表去證明,即把等式的左、右兩端都列出真值表、若真值表相同,則表達式相等。

(1)交換律

image_thumb11

(2)結合律

image_thumb14

(3)分配律

image_thumb161

(4)重疊律

image_thumb18

(5)吸收律

image_thumb20

(6)包含律

image_thumb23

(7)德 • 摩根定理

image_thumb26

6)邏輯表達式化簡

邏輯表達式是邏輯電路的基礎,化簡邏輯表達式相當於簡化了邏輯電路,簡化邏輯電路不但可以節省元器件,而且還可以提高邏輯電路的運行速度。

利用基本邏輯關系、邏輯代數定律化簡邏輯表達式稱為代數化簡法。代數化簡法是利用基本關系及定律對邏輯表達式中的各項進行合並、消去、吸收等變換使其成為與或表達式,且使表達式中的項數最少,變量個數最少。減少項數相當於減少邏輯電路中的元件,減少變量相當於減少了輸入。

掌握邏輯表達式化簡並非易事,所遇到的最大困惑是不清楚是否達到了最簡程度。

幾何化簡法的基本思路是把任意一個邏輯變量看成是直角坐標系中的一條直線,兩個變量所對應的是兩條垂直相交的直線,而相交點為兩個變量相與關系。設兩個邏輯變量 A 和 B,它們所對應的直線可以構成一個平面。

幾何化簡法的操作是按照函數表達式中的與項先在幾何圖上找出對應的點,然后查看兩點是否在同一條直線上,若在同一條直線上則可以化簡,否則不能化簡。如果 4 條直線能夠構成一個面,那么可以再次化簡。也就是說,化簡的步驟是由點到線,再由線到面。對於找不到對應點的與項可使用配項法變為標准型后再實施化簡。這種對照幾何圖形的化簡方法既可以一目了然地取得化簡結果,又可以判斷出函數表達式是否是最簡式。

7)邏輯表達式的建立

任何一個邏輯表達式都表示一種邏輯關系,這種邏輯關系歸根結底是邏輯自變量與邏輯因變量的關系。為了解決實際的邏輯問題,也可以借助真值表和最小項定理建立邏輯表達式。

在邏輯代數中,把能夠使函數為 1 的與項稱為最小項,而任何一個邏輯函數都可以寫成它的最小項之或。

概括以上分析,可以把針對邏輯問題建立邏輯函數表達式的過程歸納為一下 4 步:

① 提出邏輯問題,確定邏輯變量和函數。

② 按照問題的要求布列真值表。

③ 根據真值表寫出最小項之或的函數表達式。

④ 對函數表達式進行化簡。

參考文獻:

[1]劉克武.軟件設計師考試科目1:計算機與軟件工程知識——考點解析及模擬訓練[M].北京:清華大學出版社,2005.1.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM