计组—原码、补码、反码、移码复习
進制之間的轉換(略)
unsigned integer (無符號整數)
1. 8位二進制數表示的范圍:2^8-1 (減1位二進制的減法運算)
解析:8位二進制數所表示的范圍為:00000000 ~ 11111111 ,即最小為00000000 最大為11111111,那么
最大值11111111 =?100000000-1 = 0 ~ 2^8-1
注意:100000000-1 為二進制的減法運算
?
2,n位二進制數表示的范圍為:0 ~ 2^n -1 (計算方式同上)
?
有符號的數表示方法:
定點數x=x0x1x2......xn在定點機器中表示如下(x0:符號位,0代表正號 1代表負號,x1...xn表示數值;即共有n+1位,其中n位為數值)
1.8位純小數的表示范圍:-0.1111111 ~ +0.1111111
?其中0.1111111=1?-?0.0000001 = 1 - 2^-7,所以范圍為-(1-2^-7) ~ +(1-2^-7)
注意:0.1111111=1?-?0.0000001 = 1 - 2^-7為二進制減法運算,且由于帶有符號,所以數值位只有8-1=7位
?
2,n位純小數二進制數表示的范圍為:-(1-2^-n)~ +(1-2^-n)?(計算方式同上)
3,n位純整數二進制數表示的范圍為:-(2^n -1)~ +(2^n -1)?(計算方式同上)
?
計算機的機器碼
1.原碼表示法:原碼就是數值的真值(絕對值)前面加上一個符號位(正數0,負數1)
例:如下式子中[x]原是機器數,x是真值
x=+0.1001, 則 [x]原=0.1001 ?(加粗的第一個0表示正數)
?x=-0.1001, 則[x]原=1.1001 ?(加粗的第一個1表示負數)
?
原碼:一個8位二進制的數對應有2^8=256個編碼(8位中包含1位符號位),所表示的真值的范圍為-(2^7-1) ~ +(2^7-1) 即:-127 ~ +127可以表示的數值個數為127+127=254 加“0”數值得到254=1=255;即原碼中256個編碼只能表示255個數,原因是0占了兩個編碼?
正0和負0:+0=0000 和 -0=1000
源碼的移位規則:符號位不變,數值部分左移或右移,移出的空位補“0”。(左移一位相當于乘以2,右移一位相當于除以2)
?
十進制轉二進制技巧性做法
?
補碼
補碼的定義:[X]補 = M + X?; 即X的補碼就等于模加上真值X本身,M表示模
當x>=0時,M+X大于M,把M丟掉,所以[X]補=X,即正數的補碼等于其本身
當x<0時,[X]補=M+X=M-|X|,所以負數的補碼等于模與該數絕對值之差
?
模的大小:
純小數補碼表示的模M=2,純整數補碼表示的模M=2^(n+1)?,其中n為數值位位數
?
補碼的性質:
(1).0的補碼表示
純小數:[+0]補=2+0.00 = 0.00;[-0]補=2+(-0.00)=0.00?
純正數:[+0]補=2^(n+1)+000=000 ;[-0]補=2^(n+1)+(-000)=000
即:0的補碼表示只有一種形式就是0
(2).-1和-2^n的補碼表示(注意與原碼的表示范圍比較)
n+1位純小數補碼:
[-1]補=2+(-1)=10.00+(-1.00)=1.00 ???=[-0]原
純小數原碼表示中[-1]原是不能被表示的,因為n位純小數二進制數表示的范圍為:-(1-2^-n)~ +(1-2^-n)即2^-n -1為原碼的最小值而這個數肯定是要大于[-1]的,因此[-1]無法用原碼表示
n+1位純整數補碼:
[-2^n]補=2^(n+1)+(-2^n)=100...0+(-10...0)=10...0
純整數原碼表示中[-2^n]原是不能被表示的,因為n位純整數二進制數表示的范圍為:-(2^n -1)~ +(2^n -1),即-2^n+1為純整數原碼的最小值而這個數肯定是要大于[-2^n]的,因此[-2^n]無法用原碼表示
綜上可知,-1和-2^n的補碼與[-0]原表示形式一樣,且對于定點正數和定點小數補碼都比原碼多表示一位;
?
補碼的表示范圍:
一個n+1位定點整數補碼的表示范圍: -2^n ~ 2^n - 1 ? 即 (?-2^n =< x <=2^n - 1)
一個n+1位定點小數補碼的表示范圍:-1 ~ 1-2^-n ? ?即(-1 =< x <= 1-2^-n)
?
(3).補碼和原碼的關系
對于正數,即若x>=0 , [x]原=[x]補
若x<0,對[x]原 各位按位取反(符號位不變)后再在最低位加1得到[x]補;反之將[x]補除符號位以外各位取反后,再在最低位加1,即得到[x]原
注意:補碼中特殊數-1(純小數)和-2^n(純整數)的表示,在原碼中沒有對應表示?
?
(4).[x]補和[-x]補的關系
已知[x]補,將[x]補的各位(含符號位)取反,然后在最低位加1,即得到[-x]補。反之亦然
?
(5)補碼的移位規則
補碼的左移(乘2):符號位不變,數值部分左移,最低位移出的空位填充0;
補碼的右移(除2):符號位不變,數值部分右移,最高位移出的空位填充符號位
?
(6)補碼的位擴展
例如將字節(8位二進制)表示的補碼擴展為16位二進制表示的補碼。
擴展的要求:數值本身不發生改變
定點小數:在最低位用0擴展
定點整數:在高位用符號位擴展
?
注意:在一般在試題中出現加法運算(z=x+y)則是對補碼進行操作運算,所以需要將各個數(x,y,z)轉換為補碼
?
反碼表示
反碼的主要作用就是求補碼。原碼各位取反即為反碼,反碼末位加1既得補碼
(1).反碼的表示范圍和原碼相同。注意純小數的反碼不能表示為-1,純整數的反碼不能表示為-2^n
(2).在反碼表示中,用符號位x0表示正負,形式與原碼表示相同,0為正,1為負
?
移碼表示
[x]移=(模的指數-1) + 真值[x],
即對于整數,模=2^(n+1) ,[x]移=2^(n+1-1) + x =?2^n + x
對于小數,模=2=2^1,[x]移=2^(1-1) + x =?2^0 + x
(1)移碼的符號位:
0表示負數,1表示正數,和原碼、反碼、補碼不同
(2)移碼與真值的線性關系
移碼的順序和真值完全一致,因此移碼在表示階碼時可以方便的進行大小比較,其結果與真值一致
總結
以上是生活随笔為你收集整理的计组—原码、补码、反码、移码复习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何将Android手机当成代理服务器为
- 下一篇: xiao77论坛php,论坛(监控拍下1