在計算機內,有符號數有3種表示法:原碼、反碼和補碼。所有資料的運算都是採用補碼進行的。
原碼:原碼就是符號位加上真值的絕對值,即最高位為符號位,「0」表示正,「1」表示負,其餘位表示數值的大小。
反碼:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。+3 = 00000011
-3 = 10000011
補碼:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1,符號位不變。+3 = 00000011
-3 = 11111100
看一道題:+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進製 的實踐要比二或三進製計數出現的晚.摘...