原碼 反碼 補碼!!

2021-07-22 04:23:23 字數 2183 閱讀 5797

以下**的執行結果是(  d  ). 1

2

3

4

intmain()

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進製 的實踐要比二或三進製計數出現的晚.摘...