一、概念講解 機器數: 一個數在電腦中的二進位表示形式,叫做這個數的機器數。機器數是帶符號的,在電腦用一個數的最高位存放符號,0表示正數,1表示負數。 例如:+2二進位數:0(符號位)000 0010;-2二進位數:1(符號位)000 0010。 其中,0000 0010和1000 0010就是 ...
一、概念講解
機器數:
一個數在電腦中的二進位表示形式,叫做這個數的機器數。機器數是帶符號的,在電腦用一個數的最高位存放符號,0表示正數,1表示負數。
例如:+2二進位數:0(符號位)000 0010;-2二進位數:1(符號位)000 0010。
其中,0000 0010和1000 0010就是機器數。
真值:
因為第一位是符號位,所以機器數的形式值就不等於真正的數值。
例如,上面1000 0010,其中,最高位1代表負數,而其真正的數值是-2而不是242(1000 0010轉換為十進位為242)。
所以,為區別起見,將帶符號的機器數對應的真正數值稱為機器數的真值。
例如:0000 0010 = +000 0010 = +2;1000 0010 = -000 0010 = -2。
二、具體內容
原碼:
原碼就是符號位加上真值的絕對值。
+2 = 0000 0010[原] -2 = 1000 0010[原]
取值範圍。
[1111 1111, 0111 1111] ==> [-127, 127]
反碼:
反碼就是,正數的反碼是其原碼本身,負數的反碼是原碼基礎上,符號位不變,其餘位取反。
+2 = 0000 0010[原] = 0000 0010[反]
-2 = 1000 0010[原] = 1111 1101[反]
取值範圍。
[1111 1111, 0111 1111] ==> [-127, 127]
補碼:
補碼就是,正數的補碼是其原碼本身,負數的補碼是反碼基礎上,+1。
+2 = 0000 0010[原] = 0000 0010[反] = 0000 0010[補]
-2 = 1000 0010[原] = 1111 1101[反] = 1111 1110[補]
取值範圍。
[1000 0000, 0111 1111] ==> [-128, 127](-128只有補碼,沒有原碼、反碼)
為什麼會用到反碼和補碼?
//原碼。 1 + (-1) = 0000 0001[原] + 1000 0001[原] = 1000 0010[原] = -2(結果錯誤,於是,出現了反碼。) //反碼。 1 + (-1) = 0000 0001[反] + 1111 1110[反] = 1111 1111[反] = 1000 0000[原] = -0(結果正確,現有+0[0000 0000][原]、-0[10000 0000][原], 但是0無正負之分,並且只能有一個0,於是,出現了補碼。) //補碼。 1 + (-1) = 0000 0001[補] + 1111 1111[補] = 0000 0000[補] = 0000 0000[原] = 0(用0000 0000表示0,用1000 000表示-128。) (-1) + (-127) = 1000 0001[原] + 1111 1111[原] = 1111 1110[反] + 1000 0000[反] = 1111 1111[補] + 1000 0001[補] =1000 0000[補]
= -128(-128只有補碼,沒有原碼、反碼。)
使用補碼,不僅修複了0的符號以及存在兩個編碼問題,而且還能多表示一個最低數(-128)。
以上是我對原碼、反碼、補碼的理解,希望可以給需要的朋友帶來幫助。