計算機基本運算中,補碼運算怎樣判斷數值是否有溢位

2022-03-12 19:56:22 字數 5658 閱讀 3688

1樓:做而論道

用二進位制補碼,表示正負數,具有一定的表示範圍。

當運算結果,超出了它所能表示的範圍,就會溢位。

如果出現了溢位,這組**,就不能正確表示結果。

八位二進位制**:0000 0000~1111 1111。

也就是十進位製數:0~255。

它們如果是補碼:0~127,就直接代表零和正數;

128~255,則以補碼代表-128~-1。

八位補碼的範圍:-128~+127。

在 127 上,再加上+1,就超出了範圍,必然溢位。

這兩個正數相加之後,將會得出128,卻是個負數。

在 -128 上,再加上-1,也超範圍,也會溢位。

這兩個負數相加之後,將會得出 127,這是個正數。

補碼計算出現了溢位,最重要的特徵是:符號不正確。

你只要判斷符號正確與否,就可以了。

另外,

能夠超出範圍的演算法,一定是:正+正、負+負。

捎帶還有:正-負、負-正。

除了這四種演算法之外的計算,都不可能溢位。

2樓:鹿同泰麗

如果是加法,發現負負得正,或者正正得負了,就溢位了,如果兩個加數符號相反,則不會溢位

如果是減法,都是轉換為加法再用同樣的方法判斷。

計算機基本運算中,補碼運算怎樣判斷數值是否有溢位?

3樓:匿名使用者

追問: 那請你進行這運算並判斷是否有溢位 -75-64 。 回答: 溢位了。如果題目直接給的數字,那麼你直接計算開是否超出正127或者負128就可以了。

當然,如果你想用計算機那種方法來判斷也是可以的,把兩個數字轉換成二進位制

發現相加有進製(減法需要事先變成加法),而且兩個數字的最高位都是1,那麼就溢位了。但是這樣很麻煩,也沒必要。直接十進位制算看看超出範圍沒有就行 追問:

那-4-3 進行補碼運算,有溢位嗎? 回答: 沒有溢位 追問:

根據感覺判斷是沒有溢位,可是換成補碼,運算後有進製,像是溢位了,所以不理解 回答: 溢位不是看進製。是進製和兩個數字的符號位綜合起來看的。

什麼是補碼加減運算溢位?判別溢位有哪幾種方法?並我說明工作原理。

4樓:嘿嘿噫嘿嘿

對於加法來說,運算元符號可能是:

1. [正] + [正]

2. [正] + [負]

3. [負] + [正]

4. [負] + [負]

對於減法來說:

1. [正] - [正] 相當於加法裡的(2)

2. [正] - [負] 相當於加法裡的(1)

3. [負] - [正] 相當於加法裡的(4)

4. [負] - [負] 相當於加法裡的(3)

加法裡,哪種操作會溢位?

對於乙個有n位二進位制的補碼,其能表示的數字的範圍是:

-2^(n-1) ~ +2^(n-1)-1

負數:-2^(n-1) 到 -1

正數:1 到 2^(n-1)-1

那麼對於加法來說:

「[正] + [負]」或者「[負] + [正]」永遠都不會溢位,不管兩個運算元取值多少,結果都落在有效範圍內。

而超出有效範圍的兩種可能性就是:

1. [正] + [正]

2. [負] + [負]

那麼再看這兩種操作如果超出範圍的話,表現形式是什麼樣的:

定義兩個事件:

1. 最高有效位進製:對於n位補碼,第n-1位發生了進製;

2. 符號位進製:對於n位補碼,第n位符號位發生;

定義4個邊界值,以8位有效字長為例:

最大正127 (0111 1111)

最小正1   (0000 0001)

最小負-128(1000 0000)

最大負-1  (1111 1111)

列出所有組合(消除交換律重複)

符號位 最高有效位  是否發生溢位  最高有效位進製  符號位進製

[最小正] + [最小正]   0 0      0 0          n             n            n

[最小正] + [最大正]   0 0      0 1          y             y            n

[最小正] + [最小負]   0 1      0 0          n             n            n

[最小正] + [最大負]   0 1      0 1          n             y            y

[最大正] + [最大正]   0 0      1 1          y             y            n

[最大正] + [最小負]   0 1      1 0          n             n            n

[最大正] + [最大負]   0 1      1 1          n             y            y

[最小負] + [最小負]   1 1      0 0          y             n            y

[最小負] + [最大負]   1 1      1 0          y             n            y

[最大負] + [最大負]   1 1      1 1          n             y            y

所以,從規律上看凡是發生溢位操作,「最高有效位進製」和「符號位進製」必然是乙個是y另乙個是n,凡是不發生溢位的操作,必然是兩個全y或者兩個全n

這就是根據最高有效位和符號位發生進製的異或來判斷是否溢位規律。

下面是邏輯證明環節,很繞,證明方法很簡單,就是把幾種條件都列出來判斷一下即可:

[正]+[正]溢位,因為兩個都是正整數,所以符號位都是0,溢位時最高位發生了進製,但因為符號位是0,0加上進製的1是永遠不會發生進製的。所以對於前面定義的兩個事件:「最高有效位進製」發生了,「符號位進製」未發生。

[正]+[負]不溢位時,此時設正數範圍包括0:

如果結果為負整數,因為第二個運算元的符號位是1,結果的符號位也是1,那麼「符號位進製」未發生,同時「最高有效位進製」也未發生。因為如果發生了,會產生乙個進製1,與符號位1相加會倒是符號位變化,而此時符號位是不變的,所以可以肯定兩個事件都沒有發生。

如果結果為正整數,那麼必然同時發生了「最高有效位進製」和符號位進製」,因為第二個運算元的符號位是1,但結果符號位是0,所以符號位有進製(1 + 0 + x = 10)。而第乙個運算元的符號位又是0,所以必然是最高有效位產生了一位進製才讓符號位獲得了乙個1才能進製,對於符號位的計算來說[正]符號位0 + [負]符號位1 + 最高有效位進製x = 10,x必然是1

[負]+[負]溢位,因為兩個都是負整數,所以符號位都是1,溢位時符號位發生了進製(兩個都是1)。再看最高有效位是否有進製,對於8位的負數加法來說,產生溢位,意味著結果範圍在-129~-256之間,這個範圍內的二進位製數,以9位補碼來看,就是1 0111 1111到1 0000 0000,那麼這兩個數如果減掉符號位相加的1 0000 0000的話,得到的結果就是 0111 1111到0000 0000,這個範圍內的數字第8位都是0,所以從符號位的計算可以得知[負]符號位1 + [負]符號位1 + 最高有效位進製x = 10,最高有效位的進製值必然是0,所以最高有效位必然沒有發生進製。

參考資料

知乎

5樓:沙里波特

溢位,是指資料的大小,超出了編碼所能表示的範圍。

不僅是補碼運算,任何形式的計算,都可能產生溢位。

比如:1999 年、2000 年 ...,這是用四位十進位制表示。

當到了 9999 年,再過一年,你如果還用四位表示,這就溢位了。

字長為 8 位二進位制,補碼的範圍是-128 至+127。

那麼,+125 + 4 = +129,這就溢位了。

判斷溢位的方法:

一、自己人工運算一下,如結果(符號)不正確,即為溢位。

二、程式設計,令 cpu 計算,如 of=1,即為溢位。

三、上網求助高人幫你判斷。

6樓:匿名使用者

(1)補碼加法運算:

整數:[a]補+[b]補=[a+b]補 (模為2的n+1次方,因為可能會有進製)

小數:[a]補+[b]補=[a+b]補 (模為2,因為a和b都小於1)

(2)補碼減法運算:

因為a-b = a+(-b),所以減法可以變通為加法進行計算。

整數:[a-b]補=[a]補+[-b]補 (模為2的n+1次方)

小數:[a-b]補=[a]補+[-b]補 (模為2)

在做補碼加減法時,只需將符號位和數值部分一起參加運算,並且將符號位的進製自然丟掉就可以了。但是,當運算結果超出機器字長所能表示的數值範圍,這種情況叫做溢位。

(3)判斷溢位:

溢位出現的情況:正數+正數,負數+負數,正數-負數,負數-正數 這四種情況,當參加運算的兩個數的符號(正負)相同,而結果則與這2個數的符號不同,即為溢位。

計算機中通常將兩個參與運算的數的符號位產生的進製與最高有效位(",""."後的那位)產生的進製進行異或操作(無進製即進製為0),異或結果為1,是溢位,異或結果為0,無溢位。

補碼運算中,常用檢查溢位的方法有哪三種

7樓:受司大人

溢位判斷方法一

用xf和yf表示被加數和加數補碼的符號位,zf為補碼和的符號位.當出現xf = yf= 0兩數同為正,而zf為負,即zf=1時,有上溢.當出現xf =yf = 1兩數同為負,而zf為正,即zf= 0時,有下溢.

溢位判斷方法二

當數值最高位有進製位c1=1,符號位沒有進製c0=0時,或當數值最高位沒有進製位c1=0,符號位有進製c0=1時,結果有溢位.

溢位判斷方法三:

用變形補碼進行雙符號位運算.在變形補碼中,正數符號以"00"表示,負數的符號以"11"表示.一般稱左邊的符號位為第一符號位,右邊的符號位為第二符號位.

若運算結果的符號位為"01",則表明有正溢位產生.若運算結果的符號"10",則表明有負溢位產生.

8樓:沙里波特

溢位,是指資料的大小,超出了編碼所能表示的範圍。

不僅是補碼運算,任何形式的計算,都可能產生溢位。

比如:1999 年、2000 年 ...,這是用四位十進位制表示。

當到了 9999 年,再過一年,你如果還用四位表示,這就溢位了。

字長為 8 位二進位制,補碼的範圍是-128 至+127。

那麼,+125 + 4 = +129,這就溢位了。

判斷溢位的方法:

一、自己人工運算一下,如結果(符號)不正確,即為溢位。

二、程式設計,令 cpu 計算,如 of=1,即為溢位。

三、上網求助高人幫你判斷。

計算機的運算速度主要跟哪方面有關係

機器bai 的速度首先取決於ducpu,主頻在2.0以上基本就沒什麼差距zhi了,主要看倍dao 頻。越大越好。還有 版fsb,就是權前端匯流排,有800的,1066的,1333的,也是越大越好。再有就是記憶體,當然越大越好,現在ddr3代的已經在逐漸普及,主頻最高也能達到1333,最好選擇和fsb...

如何提高計算機運算速度,如何提高電腦的處理速度

這還不簡單。換裝備把cpu換成amd雙核cpu 記憶體換成512ddr 換個256的獨立顯示卡。換個160g sata的硬碟。換個p4電源。還要定期清一下啟動項裡的垃圾檔案。汗了。1.定期清理垃圾檔案,特別是系統盤的。2.安裝程式的時候最好別在系統盤安裝。因為這樣計算機開機讀取就慢。3.最好使用wi...

微型計算機中的數為什麼常用補碼表示

借助於補碼,可以把負數轉換成正數,這就可以用加法,代替減法運算。因此,就可以簡化計算機的硬體。計算機中,所運算的位數,是固定的,如八位機 16 位機。位數限定之後,加減法,就可以互換。如兩位在十進位制時,1 就可以用 99 代替。只取兩位,這兩種演算法,結果相同。同樣道理,時鐘倒撥 3 小時,可用正...