以下**的執行結果是( d ). 1
2
3
4
int
main()
a. 0,2147483648,2147483649,2147483647
b. 0,-2147483648,-2147483647,2147483647
c. 2147483647,2147483648,2147483649,2147483647
d. 2147483647,-2147483648,-2147483647,2147483647
解析:原碼、反碼、補碼、取反運算~、以及單目運算子 -
-2147483648這個數為32位int所能表示的最小負整數
而如果原碼為 1000 0000 0000 0000 0000 0000 0000 0000(表示-0) ,
其反碼應為數值位取反,符號位不變
即1111 1111 1111 1111 1111 1111 1111 1111
補碼為反碼+1 即為0 000 0000 0000 0000 0000 0000 0000 0000 (最高位溢位,捨去)
而+0 的原碼、反碼、補碼均為 0 000 0000 0000 0000 0000 0000 0000 0000,
如果用 1000 0000 0000 0000 0000 0000 0000 0000作為 -2147483648的原碼,
則會導致 -2147483648和0的補碼表示一樣,
因此,計算機中規定用 1000 0000 0000 0000 0000 0000 0000 0000來作為 -2147483648的補碼,
以確保-2147483648~2147483647都有唯一的補碼表示;
總結以上內容:
正數的原碼、反碼、補碼形式一致,負數的反碼為原碼的數值位取反,
補碼為反碼+1也即是原碼的數值位取反再+1,
計算機中以補碼表示資料和運算!!!
而32位最小負整數的補碼為 1000 0000 0000 0000 0000 0000 0000 0000。
然後回到本道題目的解答:
求 ~i , i的補碼為1000 0000 0000 0000 0000 0000 0000 0000,
取反0111 1111 1111 1111 1111 1111 1111 1111,
此為補碼,符號位為0,表示正數,正數原碼補碼一致,因而該數即表示2^ 31-1,即2147483647 。
求 -i ,要對乙個數值執行單目運算子 - 表示的是對該數取反然後再+1,也即是我們常說的求補運算,
注意這裡取反+1與原碼求補碼的區別!也就是求補運算與求補碼是不一樣的!
例子(4位有符號整數):x=-4 1100(補碼) -x=~x+1 也即是 0011+0001=0100(4),
而1100再求補碼應是先數值位取反,即1011,然後+1,變成1100!注意這兩者(求補與求補碼)之間的區別。
題目中 i的補碼為 1000 0000 0000 0000 0000 0000 0000 0000,
取反+1,仍為 1000 0000 0000 0000 0000 0000 0000 0000,即 -2147483648
求 1-i 我們已經求出-i的補碼為1000 0000 0000 0000 0000 0000 0000 0000
加上1的補碼即為 1000 0000 0000 0000 0000 0000 0000 0001【負數記得轉換回原碼!!】【有符號輸出】
該補碼表示的原碼為1 111 1111 1111 1111 1111 1111 1111 1111,即為- 2147483647
求-1-i -1的補碼為1 111 1111 1111 1111 1111 1111 1111 1111
加上-i補碼 1000 0000 0000 0000 0000 0000 0000 0000,
得 0111 1111 1111 1111 1111 1111 1111 1111,即 2147483647
另外補充一點,計算機中有符號數和無符號數的機器碼(補碼)是一樣的,同乙個二進位製碼按照有無符號輸出結果不一樣,例如本題中四個答案如果按照無符號整數輸出,那麼答案就是c
原碼 反碼 補碼
正數 原碼 反碼 補碼一樣 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進製 的實踐要比二或三進製計數出現的晚.摘...