用二進位制補碼計算的問題
- 2021-10-14
建議你先弄清楚計算機的一個基礎概念:模。然後才會知道之所以建立補碼這個概念的意義。我先百度一段供你參考:
【
“模”是指一個計量系統的計數範圍。如時鐘等。計算機也可以看成一個計量機器,它也有一個計量範圍,即都存在一個“模”。例如:
時鐘的計量範圍是0~11,模=12。
表示n位的計算機計量範圍是0~2^(n)-1,模=2^(n)。
“模”實質上是計量器產生“溢位”的量,它的值在計量器上表示不出來,計量器上只能表示出模的餘數。任何有模的計量器,均可化減法為加法運算。
例如:假設當前時針指向10點,而準確時間是6點,調整時間可有以下兩種撥法:
一種是倒撥4小時,即:10-4=6
另一種是順撥8小時:10+8=12+6=6
在以12模的系統中,加8和減4效果是一樣的,因此凡是減4運算,都可以用加8來代替。
對“模”而言,8和4互為補數。實際上以12模的系統中,11和1,10和2,9和3,7和5,6和6都有這個特性。共同的特點是兩者相加等於模。
對於計算機,其概念和方法完全一樣。n位計算機,設n=8, 所能表示的最大數是11111111,若再加1稱為100000000(9位),但因只有8位,最高位1自然丟失。又回了00000000,所以8位二進位制系統的模為2^8。在這樣的系統中減法問題也可以化成加法問題,只需把減數用相應的補數表示就可以了。
把補數用到計算機對數的處理上,就是補碼。
】
在你的例子中,參與運算的兩個數15和-5,顯然都可以用8位有符號數來儲存(表數範圍-128 ~ +127)。那麼這裡的模就是2的8次方即256。也就是說從-128開始到+127,再加1的話就會溢位,根據模的特性,又會變成-128。
15減去5,據補碼減法公式:[X-Y]補 = [X]補 - [Y]補 = [X]補 + [-Y]補
需要提醒的是,在計算機內部,都是以補碼儲存。當我們要求[X-Y]的結果,實際是求[X-Y]補,得到了 [X-Y]補,計算機再按照補碼編譯規則轉換成原碼形式即[X-Y]的結果輸出。這裡我們需要求[X-Y]補,也就是求[X]補 + [-Y]補。
本例中,X代表15,Y代表5,-Y就是-5。
[X]補:15的補碼,因其為正數,故和原碼形式相同為00001111
[-Y]補:-5的補碼,因其為負,故最高位1,後7位為數值位。數值位取5的原碼再按位取反加1,
0000101(5的原碼)
1111010(按位取反)
1111011(再加1,此步若最高位溢位,則屬於自然丟失)
11111011(最後加上最高符號位)——這就是-5的補碼(8位)
[X]補 + [-Y]補:
00001111
+ 11111011
________________________
100001010 ——可以看到在加法計算過程中,符號位也和數值位一起參與了計算;另外,最高位溢位自然丟失,結果為00001010,這正是+10的補碼。
最後,再從模的角度來看上述計算過程則更加清楚:
本例的模應為-128~+127
15減去5,相當於15加上5在本模的補數251
那麼想象這麼一個刻度區間 -128~+127,從刻度為15的點依次增進251次,期間,在達到模的上界127後跳轉到下界點-128繼續增進,最後停下來的位置正是刻度為10的地方。因為從15開始增進112次到上界點127,然後第113次跳轉到下界點-128,再繼續增進127次後第240次時到達-1的刻度,第241次到達0,第251次在刻度為10的地方終止。
詳細的指導,O(∩_∩)O謝謝