下溢和二进制加法溢出

问题描述 投票:0回答:1

如果是:

0b10001111+0b10011000 = 0b100100111 

下溢的情况?因为这两个长期为负,其结果是积极的?

我们什么时候会得到溢出?作为第9位将始终为1?当两个第八比特是1

binary overflow undertow
1个回答
1
投票

0b1000 1111 + 0b1001 1000 = 0B1 0010 0111

包括进位为N +结果的1号位无意义二进制补码。你可以做的是要么粘在原来的大小

0b1000 1111 + 0b1001 1000 = 0b0010 0111 //无效

或扩展操作数n + 1位,并获得n + 1位的结果。

0B1 1000 1111 + 1001 0B1 1000 = 0B1 0010 0111 //有效

其原因是,2S加入2 ^ n至负整数,使他们积极配合工作。 (编码一个<0 = - | A |,使用2 ^ N + A或2 ^ N - | A |,即,补充2 ^ N的| A |,2的补码的因此而得名)。

这是很大的,作为编码值是(2 ^ N)+ A如果A <0或如果a≥0,并且如果忽略2 ^ N,可以执行符号整数加法,而不必担心对操作数的符号。但是,你必须忽略进行(除所关注的有效性)。

为了获得精确的有效性规则,你必须考虑不同的情况:

1 / A,B> = 0

enter image description here

结果是当且仅当MSB = 0⇒C_N-1 = 0(和我们总是有C_N = 0)的有效

2 / A,B <0

enter image description here

结果是当且仅当MSB = 1⇒C_N-1 = 1(而我们总是有C_N = 1)有效

3 / A> = 0,B <0

enter image description here

结果不能过于正面或过于消极,总是有效的。而我们总是有C_N = C_N-1

我们可以看到,全球规则,表明如果结果是有效的是,C_N == C_N-1(或C_N⊕C_N-1表示溢出)。

还有许多其他同等规则。例如: 结果是有效的,如果(符号(A)!=符号(B))或((符号(A)==符号(B))和(符号(A)==符号(A + B)) 这可以在C被表示为 ((a^b) | (a^~(a+b)))&(1<< sizeof (int) -1)

© www.soinside.com 2019 - 2024. All rights reserved.