軟考筆記(1)--原碼、反碼、補碼、移碼轉換

概念

各種數值在計算機中表示的形式成爲機器數,採用二進制計數制,數的符號用 0(正數)1(負數) 表示,小數點隱含表示(不佔位置)。

機器數分爲無符號數帶符號數,帶符號數又分爲純整數純小數
純整數: 對無符號數,若約定小數點的位置在機器數的最低位之後,則爲純整數,如123。
純小數: 對無符號數,若約定小數點的位置在機器數的最高位之前,則爲純小數,如0.01。
對於帶符號數,機器數最高位用來表示正、負符號位,其中0表正號,1表示負號。

原碼定義:
在這裏插入圖片描述
反碼定義:
在這裏插入圖片描述
補碼定義:
在這裏插入圖片描述
移碼定義:
在這裏插入圖片描述


轉換

整數採用除2取餘數的方法,即用該證書除以2所得餘數從低到高的二進制位。
小數採用乘2取整數的方法,即用該小數乘判斷如果有整數爲則記爲1否則爲0 。
如果有整數和小數則纔開分別轉換。

例1:將十進制數(+123.123、-123.123)分別轉換爲原碼、反碼、補碼、移碼(設字節長爲8)

1、原碼

A、整數
a、123 / 2 = 61(餘數爲1)(低位)
b、61 / 2 = 30(餘數爲1)
c、30 / 2 = 15(餘數爲0)
d、15 / 2 = 7(餘數爲1)
e、7/ 2 = 3(餘數爲1)
f、3/ 2 = 1(餘數爲1)
g、1/ 2 = 1(餘數爲1)(高位)
則整數部分的二進制爲1111011

B、小數
a、0.123 * 2 = 0.246(取整爲0)(低位)
b、0.246 * 2 = 0.492(取整爲0)
c、0.492 * 2 = 0.984(取整爲0)
d、0.984 * 2 = 1.968(取整爲1)
e、1.968 * 2 = 1.936(取整爲1)
f、1.936 * 2 = 1.872(取整爲1)
g、1.872 * 2 = 1.744(取整爲1)(高位)
則小數部分的二進制爲1111000

當字節長爲8時,+123.123的原碼爲0 1111011.1111000 ,第一位爲符號位,正數爲0,負數爲1 。
當字節長爲8時,-123.123的原碼爲1 1111011.1111000 ,第一位爲符號位,正數爲0,負數爲1 。

2、反碼

機器數的反碼可由原碼得到。若機器數爲正數,則其反碼與原碼一樣;如果機器數爲負數,則其反碼是對它的原碼(除符號位外)各位取反而得到的。

當字節長爲8時,+123.123的原碼爲0 1111011.1111000 ,反碼爲 0 1111011.1111000
當字節長爲8時,-123.123的原碼爲1 1111011.1111000 ,反碼爲 1 0000100.0000111

3、補碼

機器數的補碼可由原碼得到。若機器數爲正數,則其補碼與原碼一樣;如果機器數爲負數,則其補碼是對它的原碼(除符號位外)各位取反,再加1而得到的(也就是對其反碼再加1)。

當字節長爲8時,+123.123的原碼爲0 1111011.1111000 ,補碼爲 0 1111011.1111000
當字節長爲8時,-123.123的原碼爲1 1111011.1111000 ,補碼爲 1 0000100.0001000( 1 0000100.0000111的低位+1)

4、移碼

機器數的移碼是在數X上增加一個偏移量來定義的,它常用於表示浮點數中的階碼。移碼和補碼的關係是符號位互爲反碼。如果機器字長爲n,規定該偏移量爲2n-1 。

當字節長爲8時,+123.123的補碼爲 0 1111011.1111000,移碼爲1 1111011.1111000
當字節長爲8時,-123.123的補碼爲 1 0000100.0001000,移碼爲0 0000100.0001000

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章