原碼,補碼,反碼,移碼

爲什麼有這些碼

原碼


定義機器字長爲n,若數值X是純整數

若數值X是純小數,對純小數的原碼計算是先將其轉換爲二進制(必須的~)

例:若機器字長爲8,則:

[+1]=0 0000001         [-1]=1 0000001     [+7]=0 0000111   [+127]=0 1111111

[-127]=1 1111111     [-7]=1 1111000     [+0.5]=0♢1000000   [-0.5]=1♢1000000

對於0來說,其原碼有兩種表示方式:[+0]=0 0000000,[-0]=1 00000000

反碼

機器數的反碼可由原碼得到。若機器數爲正數,則其反碼與原碼一樣;如果機器數爲負數,則其反碼是對它的原碼(除符號位外)各位取反而得到的。也可用公式表示,若X是純整數,則:

若X是純小數,則:

例:若機器字長爲8,則:

[+1]反=0 0000001   [-1]反=1 1111110    [+7]反=0 0000111   [-7]反=1 1111000   [+127]反=0 1111111     [-127]反=1 0000000

[+0.5]反=0♢1000000   [-0.5]反=1♢0111111

對於0來說,反碼也有兩種表示方式:[+0]反=0 0000000   [-0]反=1 1111111

補碼

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

若X是純小數,則:

例:若機器字長爲8,則:

[+1]=0 0000001   [-1]=1 1111111    [+7]=0 0000111   [-7]=1 1111001   [+127]=0 1111111     [-127]=1 0000001

[+0.5]=0♢1000000   [-0.5]=1♢1000000

對於0來說,補碼有唯一的表示方式:[+0]=0 0000000   [-0]=0 0000000

移碼

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

若X是純整數,[X]=2n-1+X   (-2n-1≤X<2n-1)

若X是純小數,[X]=1+X    (-1≤X<1)

例:若機器字長爲8,則:

[+1]=1 0000001   [-1]=0 1111111    [+7]=1 0000111   [-7]=0 1111001   [+127]=1 1111111     [-127]=0 0000001

[+0.5]=1♢1000000   [-0.5]=0♢1000000

對於0來說,補碼有唯一的表示方式:[+0]=1 0000000   [-0]=1 0000000

由於四種數據表示相互之間都存在一定的轉換關係,因爲推薦先求其原碼,然後再根據該關係轉換到該碼制。

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