用二進位制補碼計算的問題

  • 作者:由 匿名使用者 發表于 曲藝
  • 2021-10-14

用二進位制補碼計算的問題南風煙雨五莊觀 2013-03-12

建議你先弄清楚計算機的一個基礎概念:模。然後才會知道之所以建立補碼這個概念的意義。我先百度一段供你參考:

“模”是指一個計量系統的計數範圍。如時鐘等。計算機也可以看成一個計量機器,它也有一個計量範圍,即都存在一個“模”。例如:

時鐘的計量範圍是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的地方終止。

用二進位制補碼計算的問題xiafukang2 2011-09-10

詳細的指導,O(∩_∩)O謝謝

Top