原碼:
* 最高位為符號位,符號位為0表示正數,符號位為1表示負數
* 其餘部分用二進位制的絕對值表示
// 7的原碼
0000
0111
// -1的原碼
1000
0111
反碼:
* 正數,原碼與反碼相同
* 負數,在原碼的基礎上,符號位不變,其餘部分取反
// 7的反碼
0000
0111
// -7的反碼
1111
1000
補碼:
* 正數,原碼、反碼和補碼都相同
* 負數,在反碼的基礎上,末位加1
// 7的補碼
0000
0111
// -7的補碼
1111
1001
// 1 + 1
0000
0001 ; 1
0000
0001 ; 1
0000
0010 ; 2
// 2 - 1 = 2 + (-1)
0000
0010 ; 2
1111
1111 ; -1
10000
0001 ; 1,byte儲存最高位的1被丟棄
byte為例
// 整數最大, 符號位為0,其餘都是1, 那位10進製為127
0111
1111 ; 原碼、反碼、補碼
// 負數最大,符號位為1,其餘也為1, 那麼10進製為-127
1111
1111 ; 原碼
1000
0000 ; 反碼
1000
0001 ; 補碼
// +0
0000
0000 ; 原碼、反碼、補碼都一樣
// -0
1000
0000 ; 原碼
1111
1111 ; 反碼
10000
0000 ; 補碼、最高位1被丟棄,所以+0和-0的儲存是一樣
// byte有8位,一共2的8次方,256種組合,-127~127一共是255種,還剩下一種 1000 0000
// 以下僅是個人理解
// 由於最高位是符號位,所以不能是正數,那麼假設它是負數
11000
0000 ; 補碼
// 末位-1
10111
1111 ; 反碼
// 取反
11000
0000 ; 原碼 ; -128
因此,我認為1000 0000是-128,有三個原因:
1. 1000 0000 必須表示乙個數,不用白不用啊
2. 正數最高位不能為0
3. -128, 除去符號位不說,其餘位剛剛好滿足128
取值範圍:(2的n-1)-1 ~ -(2的n-1)
原碼 反碼 補碼
正數 原碼 反碼 補碼一樣 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進製 的實踐要比二或三進製計數出現的晚.摘...