補碼溢位判斷

2021-10-22 17:41:27 字數 2887 閱讀 7109

補碼可以將減法轉化為加法,但有些電路需要判斷加法是否溢位。

判斷加法是否溢位的條件是最高有效位和符號有效位。

對於nbit的二進位制數,符號位為最高位,最高有效位為符號位的低1位。加法有四種情況

[正]+[負]

[負]+[正]

[正]+[正]

[負]+[負]

其中[負]+[正] 和[正]+[負]是一定不會溢位的,但是它們的符號位進製和有效位進製有可能有變化。所以也需要考慮進來。

以4bit的二進位制為例,

正大pmax_4 = 0111 (7)

正小pmin_4 = 0001 (7)

負大nmax_4 = 1111 (-1)

負小nmin_4 = 1000 (-8)

不考慮0000,因為它對加法實際沒影響。

已經排除交換律的組合。

情況符號位

最高有效位

符號位進製

最高有效位進製溢位pma

x+pm

ax

=1110

p_+p_=1110

pmax​+

pmax

​=11

1010

nyypma

x+pm

in

=1000

p_+p_=1000

pmax​+

pmin

​=10

0010

nyypmi

n+pm

in

=0010

p_+p_=0010

pmin​+

pmin

​=00

1000

nnnpma

x+nm

in

=1111

p_+n_=1111

pmax​+

nmin

​=11

1111

nnnpmi

n+nm

ax

=10000

p_+n_=10000

pmin​+

nmax

​=10

0000

0yyn

p ma

x+nm

ax

=10110

p_+n_=10110

pmax​+

nmax

​=10

1100

1yyn

p mi

n+nm

in

=1001

p_+n_=1001

pmin​+

nmin

​=10

0110

nnnnma

x+nm

in

=10111

n_+n_=10111

nmax​+

nmin

​=10

1110

1yny

n mi

n+nm

in

=10000

n_+n_=10000

nmin​+

nmin

​=10

0000

0yny

n ma

x+nm

ax

=11110

n_+n_=11110

nmax​+

nmax

​=11

1101

1yyn

可以看到溢位的情況出現在

p ma

x+pm

ax

p_+p_

pmax​+

pmax

​、pmax

+pmi

np_+p_

pmax​+

pmin

​、nmax

+nmi

nn_+n_

nmax​+

nmin

​、nmin

+nmi

nn_+n_

nmin​+

nmin

​a符號位

b符號位

符號位進製

最高有效進製00

0100

0111

1011

10檢視組合,發現符號進製0,最高有效進製1,只可能出現在ab符號都為0的情況下,同理符號位進製1,最高有效位進製0也只可能出現在ab符號都為1,所以不用考慮ab的符號位。那麼溢位就是符號位進製和最高有效位進製的異或。

給定二進位制補碼a[7:0],b[7:0],輸出它們的和並且判斷溢位。

module top_module (

input [7:0] a,

input [7:0] b,

output [7:0] s,

output overflow

); wire [7:0] cout;

fa fa_0(a[0],b[0],1'b0,cout[0],s[0]);

generate

for(i=1;i<7;i=i+1)begin:over

fa fa_i(a[i],b[i],cout[i-1],cout[i],s[i]);

endendgenerate

fa fa_7(a[7],b[7],cout[6],cout[7],s[7]);

assign overflow = cout[7]^cout[6];

endmodule

module fa(input a,input b,input cin,output cout,output sum);

assign cout = a&b|b&cin|a&cin;

assign sum = a^b^cin;

endmodule

溢位和補碼

今天在學j a的時候,看到這樣一段 public class overflow want 20 000 000 000 got 1 474 836 480相信大家都知道這是溢位了,int是32位的,能表示帶符號位的 2 147 483 648 2 147 483 647,因為20 000 000 0...

補碼的加減及溢位判斷 加法器

加法 整數 a 補 b 補 a b 補 mod 2 n 1 小數 a 補 b 補 a b 補 mod 2 減法 整數 a b 補 a 補 b 補 mod 2 n 1 小數 a b 補 a 補 b 補 mod 2 補碼加法運算溢位判斷三種方法 方法一 xf yf分別兩個數的符號位,zf為運算結果符號位...

資料溢位判斷

程式執行過程中,跑的都是資料,因此難免會有資料溢位的現象,那麼,1 資料溢位什麼樣子呢?以byte型別為例,1byte有8bit,如果最高位向前有進製,那麼就表示資料溢位。eg 1000 0000 1000 0000 10000 0000 我們還知道計算機有個溢位標誌位of,2 那當資料溢位時,計算...