溫習(原碼,反碼,補嗎)

<script language="javascript">show_img("a1196990955");</script>
1、原碼的定義
原碼錶示法是機器數的一種簡單的表示法。其符號位用0表示正號,用:表示負號,數值一般用二進制形式表示。設有一數爲x,則原碼錶示可記作[x]原。
①小數原碼的定義

[X]原 =
X 0≤X <1
1- X -1 < X ≤ 0

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

②整數原碼的定義

[X]原 =
X 0≤X <2n
2n-X - 2n < X ≤ 0
原碼錶示數的範圍與二進制位數有關。當用8位二進制來表示小數原碼時,其表示範圍:


最大值爲0.1111111,其真值約爲(0.99)10


最小值爲1.1111111,其真值約爲(一0.99)10


當用8位二進制來表示整數原碼時,其表示範圍:


最大值爲01111111,其真值爲(127)10


最小值爲11111111,其真值爲(-127)10


在原碼錶示法中,對0有兩種表示形式:


[+0]原=00000000


[-0] 原=10000000



2、補碼的定義
機器數的補碼可由原碼得到。如果機器數是正數,則該機器數的補碼與原碼一樣;如果機器數是負數,則該機器數的補碼是對它的原碼(除符號位外)各位取反,並在未位加1而得到的。設有一數X,則X的補碼錶示記作[X]補。

①小數補碼的定義

[X]補 =
X 0≤X <1
2+ X -1 ≤ X < 0

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

②整數補碼的定義

[X]補 =
X 0≤X <2n
2n+1+X - 2n ≤ X < 0
補碼錶示數的範圍與二進制位數有關。當採用8位二進制表示時,小數補碼的表示範圍:


最大爲0.1111111,其真值爲(0.99)10


最小爲1.0000000,其真值爲(一1)10


採用8位二進制表示時,整數補碼的表示範圍:


最大爲01111111,其真值爲(127)10


最小爲10000000,其真值爲(一128)10


在補碼錶示法中,0只有一種表示形式:


[+0]補=00000000


[+0]補=11111111+1=00000000(由於受設備字長的限制,最後的進位丟失)


所以有[+0]補=[+0]補=00000000

3、反碼的定義
機器數的反碼可由原碼得到。如果機器數是正數,則該機器數的反碼與原碼一樣;如果機器數是負數,則該機器數的反碼是對它的原碼(符號位除外)各位取反而得到的。設有一數X,則X的反碼錶示記作[X]反。

反碼通常作爲求補過程的中間形式,即在一個負數的反碼的未位上加1,就得到了該負數的補碼。

①小數反碼的定義

[X]反 =
X 0≤X <1
2-2n-1-X -1 < X ≤ 0


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

②整數反碼的定義

[X]反 =
X 0≤X <2n
2n+1-1-X - 2n < X ≤ 0

例1. 已知[X]原=10011010,求[X]補。

分析如下:

由[X]原求[X]補的原則是:若機器數爲正數,則[X]原=[X]補;若機器數爲負數,則該機器數的補碼可對它的原碼(符號位除外)所有位求反,再在未位加1而得到。現給定的機器數爲負數,故有[X]補=[X]原十1,即


[X]原=10011010


[X]反=11100101


十)      1



[X]補=11100110


例2. 已知[X]補=11100110,求[X]原。


分析如下:


對於機器數爲正數,則[X]原=[X]補


對於機器數爲負數,則有[X]原=[[X]補]補


現給定的爲負數,故有:


[X]補=11100110


[[X]補]反=10011001


十) 1



[[X]補]補=10011010=[X]原

*移位操作:

對於無符號數的移位很簡單,直接變成2進制,經過移位後, 一端的位被"擠掉",而另一端空出的位以0 填補。
而對於有符號數移位則相對複雜一點,如果符號位爲0(即正數),其移位效果與無符號數 移位一致。
容易出錯的是負數移位。負數移位需先將負數變成計算機的補碼形式,即保留符號位而其它位取反加1。如 int16型的-15,正常翻譯爲1000 0000 0000 1111,保留符號位其它位取反加1,變成1111 1111 1111 0001(0xFFF1)。變成這種形式後就可以對其進行移位了,左移,保留符號位,左邊被擠掉的不管,右邊填0;而右移的時候略有不同,保留符號位,右 邊被擠掉的部分丟棄,而高位填符號位1。如-15,右移3位,則變成FFFE(-2)。顯然有符號數移位並不等效於乘法或除法。
如果將有符號數強制類型轉換爲無符號,則將2的補碼形式翻譯爲無符號數即可。如
short aa = -15;
unsigned short bb;
bb = (unsigned short) aa;
則bb變成0xFFF1(65521),實際上就是-15的計算機表示。
 
發佈了28 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章