補碼可以將減法轉化為加法,但有些電路需要判斷加法是否溢位。
判斷加法是否溢位的條件是最高有效位和符號有效位。
對於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 那當資料溢位時,計算...