為什麼有這些碼
定義機器字長為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
由於四種資料表示相互之間都存在一定的轉換關係,因為推薦先求其原碼,然後再根據該關係轉換到該碼制。
原碼,反碼,補碼,移碼
移碼 又叫增碼 是符號位取反的補碼,先將符號位取反,再取補碼,意思就是正數只將 變為1,負數將 變為0,再取補 x 1011 x 移 11011 符號位 1 表示正號 x 1011 x 移 00101 符號位 0 表示負號 一般用做浮點數的階碼,引入的目的是為了保證浮點數的機器零為全0。一 原碼 求...
原碼 反碼 補碼 移碼
如果機器字長為n,那麼乙個數的原碼就是用乙個n位的二進位制數,其中最高位為符號位 正數為0,負數為1。剩下的n 1位表示概數的絕對值。例如 x 101011 x 原 00101011 x 101011 x 原 10101011 位數不夠的用0補全。ps 正數的原 反 補碼都一樣 0的原碼跟反碼都有兩...
原碼 反碼 補碼 移碼
本人是初學者一枚,寫下筆記分享自己的一些見解,若有錯誤之處希望各位大神多多海涵,並請指出理解有誤的地方,謝謝 先確定用多少位元組儲存資料,假設這裡是1bytes 8bits,再把資料轉換為2進製的表達形式,把2進製的首位 最高位 最左的那一位作為符號位,0代表正數 1代表負數 十進位制數值中的 1轉...