標籤:
一、概念理解 1.機器數
一個數在電腦中的二進位表上形式,叫做這個數的機器數;
機器數是帶符號的,最高位存放符號(0正,1負);
00000011和10000011就是機器數;
2.真值
將帶符號的機器數對應的真正值稱為機器數的真值;
00000011的真值是+1;
10000011的真值是-1;
3.原碼
原碼就是符號位加上真值的絕對值;
[+1]=[0000 0001]原;
[ -1]=[1000 0001]原;
4.反碼
正數的反碼是其本身;
負數的反碼是在其原碼的基礎上,符號位不變,其餘各個位取反;
[+1]=[0000 0001]原 = [0000 0001]反;
[- 1]=[1000 0001]原 = [1111 1110]反;
5.補碼
正數的補碼是其本身;
負數的補碼是在反碼的基礎上+1;
[+1]=[0000 0001]原 = [0000 0001]反 = [0000 0001]補;
[- 1]=[1000 0001]原 = [1111 1110]反 = [1111 1111]補;
二、為什麼使用原碼、反碼、補碼
1.因為電腦只知道加法、對於減法就是加上一個負數;
2.為了是電腦運算設計更加簡單,也將符號位參與運算;
3.使用原碼做運算
1-1=1+(-1)=[0000 0001]原 + [1000 0001]原 = [1000 0010]原 = – 2
得出結論:使用原碼計算減法,讓符號位參與計算,結果是不正確的
4.使用反碼做運算
1-1=1+(-1)=[0000 0001]反 +[1111 1110]反 =[1111 1111]反 = [1000 0000]原 = –0
得出結論:使用反碼計算減法,解決了真值部分的不正確問題,唯一問題是“0”這個特殊值上,0帶符號是沒有意義的
[0000 0000]反 = [1000 0000]反 = 0,且0的反碼有兩種表示形式
5.使用補碼做運算
1-1=1+(-1)=[0000 0001]補+[1111 1111]補= [0000 0000]補=[0000 0000]原 = 0
這樣用0用[0000 0000]表示,而用[1000 0000]表示-128
(-1)+(-127)=[1000 0001]原+[1111 1111]原=[1111 1111]補+[1000 0001]補=[1000 0000]補
實際上是使用以前的-0的補碼來表示-128,所以-128並沒有原碼和反碼
得出結論:使用補碼計算,不僅修複了0的符號存在兩個編碼問題,而且還能多表示一個最低數
三、原碼、反碼、補碼錶示的範圍
原碼:
第一位是符號位,所有8位二進位的取值範圍是:
[1111 1111,0111 1111] 即 [-127,127]
反碼:
反碼是通過原碼得到的,所以範圍和原碼一樣,也是[-127,127]
補碼:
補碼比反碼多了一個最低數,即範圍是[-128,127]
電腦基礎(1)-原碼、反碼、補碼