乙個字長為n的機器數能表示不同的數字的個數是固定的2^n個,n=8時2^n=256;
用來表示有符號數,數的範圍就是 -2^(n-1) ~ 2^(n-1)-1,n=8時,這個範圍就是 -128 ~ +127。
用來表示無符號數,就不需要用一位來表示符號位,n位機器數全部用來表示是數值,這時表示數的範圍就是0~2^n-1,n=8時這個範圍就是0~255 。
原碼原碼是計算機機器數中最簡單的一種形式,數值位就是真值的絕對值,符號位位「0」時表示正數,符號位為「1」時表示負數,原碼又稱帶符號的絕對值。為了方便整數和小數區別,整數的符號位與數值位之間用「,」隔開,小數的符號位與數值位之間用「.」隔開。
根據2個定義可以看出,原碼的整數和小數中「0」的表示形式各有2種,「+0」和「-0」不一樣,以8位機器數為例,整數的「+0」原碼為0,0000000;整數的「-0」原碼為1,0000000;小數的「+0」原碼為0.0000000,小數的「-0」原碼為1.0000000。滿足條件的數,帶入定義裡面計算機,主要機器數字,直接計算得到。
碼跟原碼是正數時,一樣;負數時,反碼就是原碼符號位除外,其他位按位取反 在計算機系統中,數值一律用補碼來表示和儲存。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。求取補碼,就按照定義的規定,負數採用「模減去絕對值」的方法來求,這是求補數的通用方法,適合於各種進製、各種大小的數字。
已知乙個數 x,其 8 位字長的補碼定義為:a-b=a-b+mod=a+(mod-b)補碼/ x 0 <= x <= +127 ;正數和0的補碼,就是該數字本身
[x]補 = |
\ 2^8 -|x| -128 <= x < 0 ;負數的補碼,就是用 1 0000 0000,減去該數字的絕對值
例如 x = -126,其補碼為 1000 0010,計算方法如下:
1 0000 0000
- 0111 1110
-----------
1000 0010
可以看出,按照補碼的定義來求補碼,概念十分清晰,方法、步驟也是十分簡單的。
應用補碼進行計算
用補碼計算:83-25=58。
83 ---都變成補碼,再用加法運算--> 0101 0011
- 25 -> 1 0000 0000 - 0001 1001-> + 1110 0111
----- --------
58 <--忽略進製1,結果就是正確的--[1] 0011 1010
(1) 已知原碼,求補碼。
例:已知某數x的原碼為10110100b,試求x的補碼和反碼。
解:由[x]原=10110100b知,x為負數。求其反碼時,符號位不變,數值部分按位求反;求其補碼時,再在其反碼的末位加1。
1 0 1 1 0 1 0 0 原碼
1 1 0 0 1 0 1 1 反碼,符號位不變,數值位取反
1 +1
1 1 0 0 1 1 00 補碼
故:[x]補=11001100b,[x]反=11001101b。
(2) 已知補碼,求原碼。
規則1:已知乙個數的補碼,求原碼的操作其實就是對該補碼再求補碼
⑴如果補碼的符號位為「0」,表示是乙個正數,其原碼就是補碼。
⑵如果補碼的符號位為「1」,表示是乙個負數,那麼求給定的這個補碼的補碼就是要求的原碼。
例:已知乙個補碼為11111001,則原碼是10000111(-7)。
因為符號位為「1」,表示是乙個負數,所以該位不變,仍為「1」。
其餘七位1111001取反後為0000110;再加1,所以是10000111。
規則2:遞推法
分析:按照求負數補碼的逆過程,數值部分應是最低位減1,然後取反。但是對二進位制數來說,先減1後取反和先取反後加1得到的結果是一樣的,故仍可採用取反加1 有方法。
例:已知某數x的補碼11101110b,試求其原碼。
解:由[x]補=11101110b知,x為負數。
採用逆推法
1 1 1 0 1 1 1 0 補碼
1 1 1 0 1 1 0 1 反碼(末位減1)
1 0 0 1 0 0 1 0 原碼(符號位不變,數值位取反)
補碼的理解(-128的補碼解釋)原碼、反碼和補碼
原碼 反碼 補碼
正數 原碼 反碼 補碼一樣 7 原 0 0000111 b 7 反 0 0000111 b 7 補 0 0000111 b 負數 原碼就是原來的表示方法 反碼是除符號位 最高位 外取反 補碼 反碼 1 7 原 1 0000111 b 7 反 1 1111000 b 7 補 1 1111001 b 當...
原碼 反碼 補碼
正數 原碼 反碼 補碼一樣 7 原 0 0000111 b 7 反 0 0000111 b 7 補 0 0000111 b 負數 原碼就是原來的表示方法 反碼是除符號位 最高位 外取反 補碼 反碼 1 7 原 1 0000111 b 7 反 1 1111000 b 7 補 1 1111001 b 當...
原碼 反碼 補碼
數值在計算機中表示形式為機器數 計算機只能識別0和1,使用的是二進位制,而在日常生活中人們使用的 是十進位制,正如亞里斯多德早就指出的那樣,今天十進位制的廣泛採用,只不過我們絕大多數人生來具有10個手 指頭這個解剖學事實的結果.儘管在歷史上手指計數 5,10進製 的實踐要比二或三進製計數出現的晚.摘...