機器數
1 - 乙個數在計算機中的二進位制表示形式, 叫做這個數的機器數
2 - 機器數是帶符號的,在計算機用乙個數的最高位存放符號,正數為 0,負數為 1
如十進位制數 +3 ,計算機字長為 8 位,轉換成二進位制就是 0000 0011
如十進位制數 -3 ,就是 1000 0011(0000 0011和1000 0011就是機器數)
真值1 - 因為有符號位,所以機器數的形式值就不等於真正的數值
例如有符號數 1000 0011,其最高位 1 代表負,其真正數值是 -3 而不是形式值 131
2 - 為區別起見,將帶符號位的機器數對應的真正數值稱為機器數的真值
0000 0001 真值是 +000 0001 == +1
1000 0001 真值是 –000 0001 == –1
原碼1 - 原碼就是符號位加上真值的絕對值
2 - 第一位表示符號,其餘位表示值。
如 +1 == 0000 0001,-1 == 1000 0001
反碼1 - 正數的反碼是其本身
2 - 負數的反碼是在其原碼的基礎上,符號位不變,其餘各個位取反
如 +1 == 0000 0001(原)== 0000 0001(反)
-1 == 1000 0001(原)== 1111 1110(反)
補碼1 - 正數的補碼就是其本身
2 - 負數的補碼是在其原碼的基礎上,符號位不變,其餘各位取反,最後 +1(實際上是在反碼的基礎上 +1)
如 +1 == 0000 0001(原)== 0000 0001(反)== 0000 0001(補)
-1 == 1000 0001(原)== 1111 1110(反)== 1111 1111(補)
3 - 溢位問題
1 - 由於計算機中的數字用補碼表示,例如 8 位的 byte 型別的表示範圍為:[-128, 127]
補碼和原碼、反碼不同,沒有 +0 和 -0 一說,只有乙個 0
原碼、補碼存在 +0 和 -0,取值範圍 [-127,127]
如 0 == 0000 0000(補) -128 == 1000 0000(補) 127 == 0111 1111(補)
2 - 當 byte 型別的變數超上限127時
① 128 == 127 + 1
== 0111 1111(補)+ 0000 0001(補)
== 1000 0000(補)
== -128
② 129 == 127 + 2
== 0111 1111(補)+ 0000 0010(補)
== 1000 0001(補)
== -127
3 - 當 byte 型別的變數超過下限 -128 時
① -129 == -128 - 1
== 1000 0000(補) - 0000 0001(補)
== 0111 1111(補)
== 127
② -130 == -128 - 2
== 1000 0000(補) - 0000 0010(補)
== 0111 1110(補)
== 126
4 - 關於補碼溢位的問題,可用一張圖來描述(以 8 bit 為例)
小結0 原碼 | 反碼 | 補碼 都是 0000 0000
-0 原碼是 1000 0000,反碼是
11111111
128 和 -128 補碼相同 1000 0000
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 當...