原碼, 反碼 補碼的計算

2021-08-21 13:49:14 字數 1506 閱讀 7066

在計算機內,有符號數有3種表示法:原碼反碼補碼所有資料的運算都是採用補碼進行的。

原碼:原碼就是符號位加上真值的絕對值,即最高位為符號位,「0」表示正,「1」表示負,其餘位表示數值的大小。

+3 = 00000011

-3 = 10000011

反碼:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。

+3 = 00000011

-3 = 11111100

補碼:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1,符號位不變。

+3 = 00000011

-3 = 11111101

看一道題:

public static void main(string args)
結果是多少?

計算步驟如下:

1、由於所有資料的運算都是採用補碼進行,所以要先將129轉換成二進位制: 

00000000 00000000 00000000 10000001 

這個是129的原碼,也是反碼和補碼。

2、byte a = (byte) 129,因此129的前24位被截斷,只剩: 

10000001 

注意:資料的運算都是採用《補碼》進行!!!因此是對129的補碼 

00000000 00000000 00000000 10000001 

進行擷取操作,被截斷之後 10000001 也是補碼,需要將補碼轉換成原碼。

3、10000001最高位是1,表示負數,數值位減1將其轉換成反碼: 

10000000

4、然後數值位取反轉換成原碼: 

11111111

5、11111111的最高位是1,表示負數,剩餘7位表示數值,因此最終結果為: 

11111111 = -127

同理,333的計算步驟也是一樣:

1、由於所有資料的運算都是採用補碼進行,所以要先將333轉換成二進位制: 

00000000 00000000 00000001 01001101 

這個是333的原碼,也是反碼和補碼。

2、byte a = (byte) 333,因此333的前24位被截斷,只剩: 

01001101 

注意:資料的運算都是採用《補碼》進行!!!因此是對333的補碼 

00000000 00000000 00000001 01001101 

進行擷取操作,被截斷之後 01001101 也是補碼,需要將補碼轉換成原碼。

3、01001101最高位是0,表示正數,正數的原碼、反碼和補碼相同,因此 

01001101也是補碼, 01001101 = 77

原碼 反碼 補碼

正數 原碼 反碼 補碼一樣 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進製 的實踐要比二或三進製計數出現的晚.摘...