爲什麼會有反碼和補碼
計算機實際上只有加法運算,其他運算都是在底層轉變,最終以加法的形式進行處理。
反碼,補碼都是爲了簡化減法而生成的概念,反碼就是將減號轉化成負數(正數的反碼是他本身,負數的反碼是對其原碼部分逐位取反,符號位不變);正數的補碼與其原碼相同,負數的補碼是在其反碼的末位加1(爲什麼加1,我也不清楚,但是定義就是這樣)。
計算機在計算的時候都是採用的補碼進行運算,得到結果後在轉化成原碼。
1. 加法運算
10+15=00001010+00001111=00011001
00011001轉化爲原碼後爲:00011001 即25
1. 減法運算
10-15=00001010+11110001=11111011
11111011轉化爲原碼後爲:10000101 即-5
接下來就進入正題
byte是兩字節8位,所以用二進制表示
最大值爲:01111111
等比公式:首項是a1,公比是q(q≠1),則Sn=a1(1-q^n)/(1-q)
結果爲:20+21+22+23+24+25+26=20(1-27/1-2)=27-1=127
最小值爲:11111111
結果爲:-127
問題
這時候問題就來了,對應不上了啊,負數的最小值是-128,經過計算明明是-127,問題出在哪裏呢?
因爲最高位是符號位不算在裏面,所以就會有兩個0,但是從一開始發明二進制的時候,就把-0規定爲-128,而0只有一個被負數用了,所以導致正數就沒有0了。
現在也能解釋負數補碼爲什麼會加1了,加的就是-0這一位。
遇見就是緣分,點個贊再走哈