① +0或者-0的源碼、反碼、補碼
[+0]原碼=0000 0000, [-0]原碼=1000 0000
[+0]反碼=0000 0000, [-0]反碼=1111 1111
[+0]補碼=0000 0000, [-0]補碼=0000 0000
補碼沒有正0與負0之分。正數的反碼、補碼和其源碼相同,負數的反碼是其源碼,除符號位外其他位取反負數的補碼是取其反碼後加1。
詳細釋義:
所謂原碼就是二進制定點表示法,即最高位為符號位,「0」表示正,「1」表示負,其餘位表示數值的大小。
(一)反碼表示法規定:
1、正數的反碼與其原碼相同;
2、負數的反碼是對正數逐位取反,符號位保持為1;
(二)對於二進制原碼10010求反碼:
((10010)原)反=對正數(00010)原含符號位取反= 反碼11101 (10010,1為符號碼,故為負)
(11101) 二進制= -2 十進制
(三)對於八進制:
舉例 某linux平台設置了默認的目錄許可權為755(rwxr-xr-x),八進製表示為0755,那麼,umask是許可權位755的反碼,計算得到umask為0022的過程如下:
原碼0755= 反碼 0022 (逐位解釋:0為符號位,0為7-7,2為7-5,2為7-5)
(四)補碼表示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。
(1)負數的源碼如何得出擴展閱讀
轉換方法
由於正數的原碼、補碼、反碼表示方法均相同,不需轉換。在此,僅以負數情況分析。
(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]反=11001011B。
(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 原碼(符號位不變,數值位取反)
② 如何用負數的補碼來求原碼,求例子
首先,負數的補碼=其正數的源碼的反碼+1。然後,負數的源碼就是先減1在取反,最高位為1
eg:(-125)源=11111101B, (-125)反=10000010B, (-125)補=10000011B,反過來求-125的源碼就是用-125的補碼10000011先減1,得到10000010,在取反01111101,最高位改成1,11111101,懂了嗎?祝考試周愉快~
③ 怎麼求一個負數的原碼和補碼
補碼,來自於:補數。
一般的常識:
鍾表時針,倒撥 3 小時,可以用「正撥 9 小時」來代替。
同理,分針 倒撥 X 分,可以用 正撥 60-X 代替。
60 是分針的周期。
十進制數,兩位:0~99,周期就是一百。
-1 可以用 +99 代替。
如:25 - 1 = 24
25 + 99 = (1) 24
忽略進位 1 百,結果就是相同的。
那麼,-1 的補數,就是 99 。
-2 的補數,就是 98 。
-X 的補數,就差唯是【 周期 + 該負數 】。
--------
藉助於補數,就可以用加法,代替減法運算。
所以,計算機就可以節省硬體了。
--------
八位二進制:0000 0000~1111 1111(0~255)。
周期是 256。
那麼,-1 可以用 1111 1111 (+255) 代替。
即:
沖慶塌-1 的補碼,就是 1111 1111 (= 256-1=+255) 。
-2 的補碼,就是 1111 1110 (= 256-2=+254) 。
。。。
-X 的補碼,就是【 周期 + 該負數 】。散圓
-128,就可以用 1000 0000 (= 128)代替 。
正數,不需要變換,直接運算即可。
--------
在計算機中,負數,就是用補碼存儲、計算的。
原碼和反碼,毫無用處,它們在計算機中都不存在。
④ -67的原碼和反碼各是多少
十進制-67的原碼是01000011、反碼是10111100和補碼是10111101。
轉換規則:
1、負數的源碼為二進制前面加符號位;
-67=1000011(二進制)=11000011(原碼)
2、負數的反碼=原碼各位取反(除了最高位外);
11000011(原碼)=10111100(反碼)
3、負數的補碼=負數的反碼+00000001;
10111100(反碼)=10111101(補碼)