趙煜 馬萌
摘要:從機器碼出發(fā),介紹了原碼、反碼、補碼的定義以及三者之間的內(nèi)在聯(lián)系,由于原碼在加減運算中的不足引入了補碼,為了方便求得補碼又引入了反碼,從而清晰地展示了三者編碼之間的聯(lián)系,使用VEE可視化語言實現(xiàn)了三者之間的轉(zhuǎn)化,通過2種方法介紹了負(fù)數(shù)原碼、反碼、補碼之間的程序設(shè)計過程,并且介紹了機器數(shù)之間的加減運算方法,以及具體運算過程,使用人工算法驗證了該程序設(shè)計的正確性。
關(guān)鍵詞:原碼;反碼;補碼;運算過程
中圖分類號:TP316文獻標(biāo)志碼:A文章編號:1008-1739(2020)13-56-4
0引言
計算機能夠按照程序自動運算和快速處理大量數(shù)據(jù),既可以進行數(shù)值計算,又可以進行邏輯計算,還有存儲記憶的功能,其中處理的大量數(shù)據(jù)包括加減乘除運算的數(shù)值型數(shù)據(jù)和不能進行運算的非數(shù)值型數(shù)據(jù)。為了達到方便、容易區(qū)分和存儲等要求,計算機內(nèi)部使用二進制存儲數(shù)據(jù)。
計算機中需要原碼、補碼和反碼3種編碼,和計算機的硬件有關(guān),二進制的加法,一個異或門就能實現(xiàn),多位加法器的實現(xiàn)很容易,然而減法沒有找到直接的硬件,但是通過補碼能把減法轉(zhuǎn)換成加法來做,這樣一種硬件執(zhí)行結(jié)構(gòu)就可以實現(xiàn)加與減2種基本運算。這樣就出現(xiàn)了補碼,對補碼的求解過程,其中一個步驟就剛好形成了反碼,反碼是原碼轉(zhuǎn)換成補碼的過渡碼。
1原碼、反碼、補碼的基本概念
一個數(shù)在計算機中的二進制表示形式叫做這個數(shù)的機器數(shù),機器數(shù)是帶符號的,計算機用機器數(shù)的最高位放符號位,正數(shù)為0,負(fù)數(shù)為1。因為第一位是符號位,所以機器數(shù)的形式值就不等于真正的數(shù)值,將帶符號的機器數(shù)對應(yīng)的真正數(shù)值稱為機器數(shù)的真值。原碼、反碼、補碼是機器存儲一個具體數(shù)字的編碼方式,就是為了理解計算機使用二進制進行計算的原理[1]。
原碼是機器數(shù)中最簡單的一種形式,原碼由符號位和數(shù)值位兩部分構(gòu)成。數(shù)值位部分均保持原來的樣子,不需改變。如果是正數(shù),最前面的0視為符號位;如果是負(fù)數(shù),最前面的1視為符號位,數(shù)值位就是真值的絕對值,原碼又稱帶符號的絕對值。原碼進行加減運算時,一個正數(shù)和一個負(fù)數(shù)運算時的結(jié)果可能為正也可能為負(fù),而且是絕對值進行比較,這樣相對很不方便,因此引入了補碼。
反碼通常是用來由原碼求補碼或者由補碼求原碼的過渡碼,反碼跟原碼是正數(shù)時一樣;負(fù)數(shù)時,反碼就是原碼符號位除外,其他位按位取反。
補碼是計算機把減法運算轉(zhuǎn)化為加法運算的關(guān)鍵編碼,正數(shù)的補碼是它本身,負(fù)數(shù)的補碼是除符號位,原碼取反加1。
2算法設(shè)計過程
2.1 VEE可視化語言
HP VEE是一種主要用于儀器控制和測量處理的可視化編程語言,自1990年以圖形化界面和數(shù)據(jù)流編程為核心的1.0版由HP公司正式發(fā)布以來,提升6.0位核心,集成儀器設(shè)備控制、高級數(shù)據(jù)采集以及處理、數(shù)據(jù)分析等眾多先進技術(shù),可用于Windows,SUN,Unix等多種平臺的測試軟件開發(fā)環(huán)境。
HP VEE具有以下主要特點:①圖形化編程;②豐富的儀器I/O驅(qū)動;③虛擬儀器測試;④自動數(shù)據(jù)類型轉(zhuǎn)化;⑤強大的數(shù)學(xué)分析能力;⑥開放的編程環(huán)境;⑦網(wǎng)絡(luò)支持。此外,VEE還是一種基于圖形式開發(fā)、調(diào)試和運行程序的集成化環(huán)境,其基本編程單元是一系列的圖形化功能控件,每個控件都存在一個或多個輸入、輸出端口,選擇合適的端口進行連接,即可完成程序的運行流程。本文主要使用VEE可視化語言實現(xiàn)原碼、補碼和反碼相互轉(zhuǎn)換關(guān)系的設(shè)計過程,展示原碼、補碼和反碼相互轉(zhuǎn)換關(guān)系。
2.2具體實施過程
由于正數(shù)的原碼、反碼、補碼都相同,因此正數(shù)的轉(zhuǎn)換相對簡單,直接符號位為0,真值不變即可。
2.3程序?qū)崿F(xiàn)原碼、反碼、補碼轉(zhuǎn)換過程
(1)使用定義法實現(xiàn)負(fù)數(shù)原碼、反碼、補碼之間的轉(zhuǎn)化
原碼轉(zhuǎn)化為二進制,取反為反碼,再加1為補碼。具體使用VEE語言實現(xiàn)程序設(shè)計過程為:可選擇要轉(zhuǎn)化數(shù)的類型,可選擇十進制數(shù)或二進制數(shù)。如果是十進制數(shù)需要轉(zhuǎn)換成二進制然后進行求反碼和補碼。十進制轉(zhuǎn)二進制使用除二法,即div函數(shù)和mod函數(shù),被轉(zhuǎn)換數(shù)循環(huán)執(zhí)行div/2,并且每個數(shù)需要取mod,即除二取余,然后將這些數(shù)轉(zhuǎn)化為字符串加起來,即實現(xiàn)了十進制轉(zhuǎn)二進制數(shù)。
需要字符串轉(zhuǎn)數(shù)組及取反,字符串轉(zhuǎn)數(shù)組首先用到strFromLen(str,from,len)函數(shù),輸入str為整個字符串,from是從第幾個字符開始取,len是要取得的字符長度。其次,字符串轉(zhuǎn)數(shù)組要用到Collector函數(shù),該函數(shù)實現(xiàn)從strFromLen(str, from,len)函數(shù)中取得的單個字符收集起來,組成一個數(shù)組,其中Collector函數(shù)中Data為單個字符輸入,XEQ為輸出觸發(fā),字符串轉(zhuǎn)數(shù)組取反即將0輸出為1,1輸出為1,即完成了原碼轉(zhuǎn)反碼的過程。反碼轉(zhuǎn)補碼需要再加1,此處使用二進制轉(zhuǎn)十進制,然后加1再轉(zhuǎn)為二進制的辦法,二進制轉(zhuǎn)十進制使用bits(str)函數(shù),即乘2相加法,上述為使用定義法實現(xiàn)原碼、反碼、補碼之間的轉(zhuǎn)化。
(2)先求模,然后求反碼和補碼
補碼設(shè)計流程如圖1所示。
2.4補碼實現(xiàn)運算過程
CPU中有加法器但沒有減法器,通過寫出一位全減器的真值表,設(shè)計出硬件電路并將其級聯(lián),可得到一個減法器,但是大部分情況設(shè)計一個減法器還不如用加法器替代,將減數(shù)取反加一與被減數(shù)相加即可把減法運算轉(zhuǎn)化為加法,將減數(shù)取反加一的操作就是將負(fù)數(shù)用補碼的形式表示,也就是用補碼這種數(shù)值編碼方式實現(xiàn)了將減法轉(zhuǎn)變?yōu)榧臃ǖ摹?p>
上邊已經(jīng)講述了補碼的計算過程,在進行加減運算時只要將減法轉(zhuǎn)化為加法,然后使用補碼計算即可,計算結(jié)果再由補碼轉(zhuǎn)化為原碼即為真實計算結(jié)果。
為了便于理解,以鐘表來表示,鐘表中12點倒退3點就是9點,超過12點重新使用1~12來表示,12是鐘表的模,順時針代表溢出,超過12為溢出,比如10點加5點,為:10+5=15,溢出12,15-12為3點。逆時針為減法,3點往后倒5點從鐘表中不難看出是10點,這里減5 h,其實就是計算機中的補碼,即12-5,對應(yīng)7,將減法轉(zhuǎn)化為加法,即3+(12-5)為10點,便于將減法轉(zhuǎn)為加法,“?!钡奶卣鳛闇p去一個數(shù)等價于加上這個數(shù)的補數(shù),計算機引入了模,以負(fù)數(shù)為例,0> >=-2 ,此時模為2+1。
鐘表中,如果9點+8點=17點對應(yīng)鐘表的5點,此處即有一個溢出的概念,在計算機中也存在溢出,溢出即一個位二進制的補碼,其表達范圍是-2-1+1~2-1-1,如果超出這個范圍就稱為溢出。
符號位有00,01,11,10四種可能,其中00,01代表正數(shù);11,10代表負(fù)數(shù);01為正溢出,10為負(fù)溢出。
分別以符號位為00,01,11,10四種舉例說明,運算示意表如表2所示。
3實驗仿真
使用十進制數(shù)進行一組加減,然后手動算法與設(shè)計算法進行比較。比如5+(-7),計算結(jié)果為-2,使用概念計算:
4結(jié)束語
討論了原碼、反碼、補碼的轉(zhuǎn)化過程,簡單介紹了如何使用程序來實現(xiàn)轉(zhuǎn)換過程。具體說明了使用補碼的運算過程,并且針對溢出問題進行了舉例說明,并給出了根據(jù)溢出結(jié)果得到正確結(jié)果的方法。學(xué)習(xí)是一個不斷積累的過程,在深入理解原碼、反碼和補碼3種編碼之間相互關(guān)系的同時,對計算機中數(shù)值的理解變得更加容易,能輕松地進行原碼、反碼、補碼的相互轉(zhuǎn)化,并且可以實現(xiàn)運算。
參考文獻
[1]唐朔飛.計算機組成原理:第2版[M].北京:高等教育出版社, 2012.
[2]羅嘉慶,周世杰,徐潔.原碼、反碼和補碼的教學(xué)探討[J].計算機教育,2015(10):42-45.
[3]孫麗.計算思維下再談補碼設(shè)計思想[J].電腦知識與技術(shù), 2015,11(29):70-71.
[4]聽雨軒工作室.AgilentVEE虛擬儀器工程設(shè)計與開發(fā)[M].北京:國防工業(yè)出版社,2004.
[5]楊學(xué)穎,周建業(yè).計算機補碼概念探究[J].河南科技學(xué)院學(xué)報(自然科學(xué)版),2011,39(3):90-94.
[6]哈馬克.計算機組成與嵌入式系統(tǒng):第6版[M].王國華,譯.北京:機械工業(yè)出版社,2013.