byte最大值最小值的問題

爲什麼會有反碼和補碼

  計算機實際上只有加法運算,其他運算都是在底層轉變,最終以加法的形式進行處理。
反碼,補碼都是爲了簡化減法而生成的概念,反碼就是將減號轉化成負數(正數的反碼是他本身,負數的反碼是對其原碼部分逐位取反,符號位不變);正數的補碼與其原碼相同,負數的補碼是在其反碼的末位加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這一位。

遇見就是緣分,點個贊再走哈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章