久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

計算機基礎(chǔ)理論:原碼,、反碼,、補碼、移碼

 nbxming 2011-05-28
計算機基礎(chǔ)理論:原碼,、反碼,、補碼,、移碼(2009-04-23 00:02:36)
對于正數(shù),原碼和反碼,,補碼都是一樣的,,都是正數(shù)本身,。
  對于負數(shù),,原碼是符號位為1,數(shù)值部分取X絕對值的二進制。
                  反碼是符號位為1,其它位是原碼取反,。
       補碼是符號位為1,其它位是原碼取反,未位加1,。
       也就是說,負數(shù)的補碼是其反碼未位加1。
                  移碼就是將符號位取反的補碼

一,、標準理論

1,、原碼的定義

①小數(shù)原碼的定義

[X] =

X 0≤X <1
1- X -1 < X ≤ 0

例如: X=+0.1011 , [X]原= 01011
X=-0.1011 [X]原= 11011

②整數(shù)原碼的定義

[X] =

X 0≤X <2n
2n-X - 2n < X ≤ 0

2,、補碼的定義

①小數(shù)補碼的定義

[X] =

X 0≤X <1
2+ X -1 ≤ X < 0

例如: X=+0.1011, [X]= 01011
X=-0.1011, [X]= 10101

②整數(shù)補碼的定義

[X] =

X 0≤X <2n
2n+1+X - 2n ≤ X < 0

3,、反碼的定義

①小數(shù)反碼的定義

[X] =

X 0≤X <1
2-2n-1-X -1 < X ≤ 0

例如: X=+0.1011 [X]= 01011
X=-0.1011 [X]= 10100

②整數(shù)反碼的定義

[X] =

X 0≤X <2n
2n+1-1-X - 2n < X ≤ 0

4.移碼:移碼只用于表示浮點數(shù)的階碼,所以只用于整數(shù),。

①移碼的定義:設由1位符號位和n位數(shù)值位組成的階碼,,則 [X]=2n + X -2n≤X ≤ 2n
例如: X=+1011 [X]=11011 符號位“1”表示正號
X=-1011 [X]=00101 符號位“0”表示負號

②移碼與補碼的關(guān)系: [X]移與[X]補的關(guān)系是符號位互為反碼,
例如: X=+1011 [X]=11011 [X]=01011
X=-1011 [X]=00101 [X]=10101

③移碼運算應注意的問題:
◎?qū)σ拼a運算的結(jié)果需要加以修正,,修正量為2n ,,即對結(jié)果的符號位取反后才是移碼形式的正確結(jié)果,。
◎移碼表示中,0有唯一的編碼——1000…00,,當出現(xiàn)000…00時(表示-2n),,屬于浮點數(shù)下溢。

二,、補碼加,、減運算規(guī)則

1、運算規(guī)則

[X+Y]= [X]+ [Y]
[X-Y]= [X]+ [-Y]

若已知[Y],,求[-Y]的方法是:將[Y]的各位(包括符號位)逐位取反再在最低位加1即可,。
例如:[Y]= 101101 [-Y]= 010011

2、溢出判斷,,一般用雙符號位進行判斷:

符號位00 表示正數(shù) 11 表示負數(shù)
結(jié)果的符號位為01時,,稱為上溢;為10時,,稱為下溢

例題:設x=0.1101,,y=-0.0111,符號位為雙符號位
用補碼求x+y,,x-y
[x]補+[y]補=00 1101+11 1001=00 0110
[x-y]補=[x]補+[-y]補=00 1101+00 0111=01 0100
結(jié)果錯誤,,正溢出

三、原碼一位乘的實現(xiàn):

設X=0.1101,,Y=-0. 1011,,求X*Y
解:符號位單獨處理, xy
數(shù)值部分用原碼進行一位乘,,如下圖所示:

高位部分積 低位部分積/乘數(shù) 說明
0 0 0 0 0 0 1 0 1 1   起始情況
+) 0 0 1 1 0 1 乘數(shù)最低位為1,,+X

0 0 1 1 0 1
0 0 0 1 1 0 1 1 0 1 1(丟) 右移部分積和乘數(shù)
+) 0 0 1 1 0 1 乘數(shù)最低位為1,+X

0 1 0 0 1 1
0 0 1 0 0 1 1 1 1 0 1(丟) 右移部分積和乘數(shù)
+) 0 0 0 0 0 0 乘數(shù)最低位為0,,+0

0 0 1 0 0 1
0 0 0 1 0 0 1 1 1 1 0(丟) 右移部分積和乘數(shù)
+) 0 0 1 1 0 1 乘數(shù)最低位為1,,+X

0 1 0 0 0 1
0 0 1 0 0 0 1 1 1 1 1(丟) 右移部分積和乘數(shù)

四、原碼一位除的實現(xiàn):一般用不恢復余數(shù)法(加減交替法)

部分積 低位部分積 附加位 操作說明
0 0 0 0 0 0 1 0 1 1   起始情況
+) 0 0 0 0 0 0 乘數(shù)最低位為1,,+X

0 0 0 0 0 0
0 0 0 0 0 0 1 1 0 1 1(丟) 右移部分積和乘數(shù)
+) 1 1 0 0 1 1 乘數(shù)最低位為1,,+X

0 1 0 0 1 1
0 0 1 0 0 1 1 1 1 0 1(丟) 右移部分積和乘數(shù)
+) 0 0 0 0 0 0 乘數(shù)最低位為0,+0

0 0 1 0 0 1
0 0 0 1 0 0 1 1 1 1 0(丟) 右移部分積和乘數(shù)
+) 0 0 1 1 0 1 乘數(shù)最低位為1,,+X

0 1 0 0 0 1
0 0 1 0 0 0 1 1 1 1 1(丟) 右移部分積和乘數(shù)

§2.5 浮點運算與浮點運算器

一,、浮點數(shù)的運算規(guī)則

1、浮點加減法的運算步驟

設兩個浮點數(shù) X=Mx※2Ex Y=My※2Ey
實現(xiàn)X±Y要用如下5步完成:
①對階操作:小階向大階看齊
②進行尾數(shù)加減運算
③規(guī)格化處理:尾數(shù)進行運算的結(jié)果必須變成規(guī)格化的浮點數(shù),,對于雙符號位的補碼尾數(shù)來說,,就必須是
001×××…×× 或110×××…××的形式
若不符合上述形式要進行左規(guī)或右規(guī)處理。

④舍入操作:在執(zhí)行對階或右規(guī)操作時常用“0”舍“1”入法將右移出去的尾數(shù)數(shù)值進行舍入,,以確保精度,。
⑤判結(jié)果的正確性:即檢查階碼是否溢出
若階碼下溢(移碼表示是00…0),要置結(jié)果為機器0,;
若階碼上溢(超過了階碼表示的最大值)置溢出標志,。

例題:假定X=0 .0110011*211,Y=0.1101101*2-10(此處的數(shù)均為二進制) ?? 計算X+Y,;
解:[X]: 0 1 010 1100110
[Y]: 0 0 110 1101101
符號位 階碼 尾數(shù)

第一步:求階差: │ΔE│=|1010-0110|=0100
第二步:對階:Y的階碼小,, Y的尾數(shù)右移4位
[Y]變?yōu)?0 1 010 0000110 1101暫時保存
第三步:尾數(shù)相加,采用雙符號位的補碼運算
00 1100110
+00 0000110
00 1101100
第四步規(guī)格化:滿足規(guī)格化要求
第五步:舍入處理,,采用0舍1入法處理
故最終運算結(jié)果的浮點數(shù)格式為: 0 1 010 1101101,,
即X+Y=+0. 1101101*210

2、浮點乘除法的運算步驟

①階碼運算:階碼求和(乘法)或階碼求差(除法)
[Ex+Ey]移= [Ex]移+ [Ey]補
[Ex-Ey]移= [Ex]移+ [-Ey]補

②浮點數(shù)的尾數(shù)處理:浮點數(shù)中尾數(shù)乘除法運算結(jié)果要進行舍入處理
例題:X=0 .0110011*211,,Y=0.1101101*2-10
求X※Y
解:[X]: 0 1 010 1100110
[Y]: 0 0 110 1101101
第一步:階碼相加
[Ex+Ey]移=[Ex]移+[Ey]補=1 010+1 110=1 000
1 000為移碼表示的0
第二步:原碼尾數(shù)相乘的結(jié)果為:
0 10101101101110
第三步:規(guī)格化處理:已滿足規(guī)格化要求,,不需左規(guī),尾數(shù)不變,,階碼不變,。
第四步:舍入處理:按舍入規(guī)則,加1進行修正
所以 X※Y= 0.1010111※2+000

chapter two

計算機內(nèi)部,,數(shù)是用二進制表示的,。二進制數(shù)的編碼方式有補碼、原碼,、反碼
和增碼,。二進制數(shù)的表示形式有定點表示(整數(shù)INTEGER和20到2-1之間的數(shù))和浮點
表示兩種。
無論什么數(shù),,它總是由符號和數(shù)值兩部分組成,。在計算機中數(shù)值和符號用某種
編碼的形式表示。為明確起見,,把原來的數(shù)值叫做真值,,而把機器中對符號和數(shù)值
進行編碼之后的數(shù)值叫做機器數(shù)。
1.原碼
▲n位二進制定點小數(shù)X=x0x1x2...xn-1的原碼[X]原定義為:
┌X 當1>X>=0時
[X]原=┤
└1-X=1+│X│ 當0>=X>-1時
其特點有:
(1)0的原碼有兩種,即0.0000...0和1.0000...0,。
n個 n個
(2)數(shù)的表示范圍[-(1-2-n+1),(1-2-n+1)]
(3)最高位為符號位.若負數(shù)時符號位為1;正數(shù)則符號位為0.
(4)作乘除運算時較為方便,但作加減運算時較為復雜.
例: 若X=0.0101101.則[X]原=0.0101101
若X=-0.1010010,則[X]原=1.1010010
▲n位整數(shù)X的原碼定義如下:
┌X 當2n-1>X>=0時
[X]原=┤
└2n-1-x=2n-1+│X│ 當0>=X>-2-n-1時
2.補碼
▲n位二進制定點小數(shù)X=x0x1x2...xn-1的補碼[X]補定義為:
┌X 當1>X>=0時
[X]補=┤
└2+X=2-│X│ 當0>X>=-1時
其特點有:
(1)0的補碼有只有一種形式,即0.0000...0
n個
(2)數(shù)的表示范圍[-1,(1-2-n+1)]
(3)最高位為符號位.若負數(shù)時符號位為1;正數(shù)則符號位為0.
(4)對于兩個數(shù)X,Y,且X+Y不溢出,則有[X+Y]補=[X]補+[Y]補.
(5)補碼加法的溢出判別,若兩數(shù)均為負數(shù)相加,則最高位進位是0為下溢;若
兩數(shù)均為正數(shù)相加,則最高位是1為上溢;若一正數(shù)和一負數(shù)相加,則不會發(fā)生溢出.
(6)作加減運算時較為方便,但作乘除運算時要比原碼復雜.
例:若 X=-0.1000100, 則[X]補=10-0.1000100=1.0111100
X=0.1000001, 則[X]補=X=0.1000001
注:負數(shù)補碼的求法:按位求反末位加1
如:求-0.1000100的補碼
(1)按位求反:1.0111011
(2)末位加1: 1.0111100
1.0111100即為-0.1000100的補碼,。
▲n位整數(shù)X的補碼定義如下:
┌X 當2n-1>X>=0時
[X]補=┤
└2n+X=2n-│X│ 當0>X>=-2n-1時
3.反碼
▲n位二進制定點小數(shù)X=x0x1x2...xn-1的反碼[X]反定義為:
┌X 當1>X>=0時
[X]反=┤
2-2-n+1+X 當-1<X<=0時

其特點有:
(1)0的反碼有兩種,即0.0000...0和1.1111...1。
n個 n個
(2)數(shù)的表示范圍[-(1-2-n+1),(1-2-n+1)]
(3)最高位為符號位.若負數(shù)時符號位為1;正數(shù)則符號位為0.
(4)反碼和補碼的關(guān)系:[X]補=[X]反+2-n+1.
(5)反碼加法:[X+Y]反=[X]反+[Y]反+Ψ(Ψ為[X]反+[Y]反的最高位進位).
(6)反碼加法的溢出判別和補碼相同.
例: 若X=-0.1011 則[X]反=10-0.0001-0.1011=1.0100
若[X]補=1.0110, 求[X]反.
因為 [X]補=[X]反+0.0001
所以 [X]反=[X]補-0.0001=1.0101
或者:X=-10+1.0110=-0.1010
則[X]反=(10-0.0001)-0.1010=1.0101
▲n位整數(shù)X的反碼定義如下:
┌X 當2n-1>X>=0時
[X]反=┤
└(2n-1)+X 當0>=X>-2n-1時
總之,一個正數(shù)X的原碼,、補碼,、反碼均為其本身。一個二進制負數(shù)的原碼,、補
碼,、反碼可用公式求得;一個負數(shù)的原碼只要將符號位變?yōu)椋?,而其它都不變,,?
個負數(shù)的反碼只要將原碼除符號位外其它位按位求反即可,,一個負數(shù)X的補碼可用
列方法求得:寫出X的原碼,將其按位求反,,再在末尾加上1即可,。

二、 民間通俗說法

對于在內(nèi)存中存有的數(shù)據(jù)都是以二進制形式存在可是為了更好地區(qū)分正數(shù)和負數(shù)便采用了不同的編碼存儲:
對于正數(shù),在內(nèi)存中存在的是其原碼:
如:
int i=1;
則變量i在內(nèi)存中的存大形式為: 00 00 00 00 00 00 00 01
一個C語言中的整型變量占有兩個字節(jié)即16位二進制數(shù)位.最高位為符號位 "0"表示其為正.
原碼是將變量直接轉(zhuǎn)為二進制存儲.

對于負數(shù)如:
int i=-1;
首先在符號位上表征其為負即最高位為1: 10 00 00 00 00 00 00 01
符號位后便是1的原碼: 0 00 00 00 00 00 00 01
實際上負數(shù)據(jù)并非這樣存儲,而是先將符號位之后的15位每位求反:0變1,1變0.
則所得碼為(符號位不變,其它位求反,反碼即每原碼每位求反): 11 11 11 11 11 11 11 10
補碼為原碼再加 1 ,則為:
11 11 11 11 11 11 11 11
負數(shù)在內(nèi)存中以補碼形式存儲在內(nèi)存中草存在的形式為其補碼形式即:
11 11 11 11 11 11 11 11
取數(shù)時系統(tǒng)先看符號位如果是"0"則直接輸出,如果為"1" 則認為所存為負數(shù):
即將所存數(shù)減1先求出其反碼,若仍以"-1"為例則補碼減1后為: 11 11 11 11 11 11 11 10
然后符號位外每位求反得其原碼: 10 00 00 00 00 00 00 01
然后輸出: -1.

內(nèi)存中存的數(shù)都是以補碼形式存在的,,原碼是正數(shù)的時候,,補碼就是原碼,是負數(shù)的時候,,補碼就是原碼取反加1,,反碼就是原碼取反
主要原因是原碼和反碼在表示數(shù)的時候的不唯一性,比如表示零的時候,,原碼,、反碼就有兩種表示法,10000000和00000000,,所以采用補碼,。

三、總結(jié)

對一個正數(shù)X的原碼,、補碼,、反碼均為其本身

一個二進制負數(shù)的原碼、補碼,、反碼可用公式

反碼 = 原碼(除符號位外)每位取反,;

補碼 = 反碼 + 1;

反碼 = 補碼 - 1,;

移碼 = 補碼符號位取反

移碼與補碼的關(guān)系: [X]移與[X]補的關(guān)系是符號位互為反碼,,
例如: X=+1011                 [X]=11011                  [X]=01011
              X=-1011                 [X]=00101                  [X]=10101

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多