Altifigence Academy

8 / 37 · Concepto

Complemento a dos, extensión de signo y desbordamiento

Distinga la interpretación signed y las condiciones de overflow con ecuaciones y contraejemplos.

Cambia el peso del bit más significativo

Un entero de NN bits en complemento a dosComplemento a dos Representación de enteros con signo mediante secuencias de bits de ancho fijo. El rango de n bits va de −2^(n−1) a 2^(n−1)−1. se interpreta así:

s=−bN−12N−1+∑i=0N−2bi2is=-b_{N-1}2^{N-1}+\sum_{i=0}^{N-2}b_i2^i
−2N−1≤s≤2N−1−1-2^{N-1}\le s\le 2^{N-1}-1

1010 de cuatro bits es 10 en unsignedunsigned Interpretación de una secuencia de bits como entero no negativo. Con n bits, el rango es de 0 a 2^n−1; puede diferir de la interpretación signed de los mismos bits. Más información y -6 en signed. No se separa un bit de signo para leer el resto como magnitud. En ancho fijo, −x-x se obtiene invirtiendoNegación Operación NOT que cambia 0 por 1 y 1 por 0. Una barra sobre una expresión aplica NOT a toda la expresión cubierta. Más información los bits y sumando 1, pero el opuesto +8 del mínimo -8 no cabe en signed de cuatro bits.

Extender debe conservar el valor

La extensión unsigned añade ceros delante; la signed repite el signo. Extender 1010 a 00001010 da +10; a 11111010 da -6. La interpretación decide el circuito de extensión necesario.

SystemVerilog
logic signed [3:0] a, b;
logic signed [4:0] exact;
logic [3:0] result;
logic overflow;
assign exact = {a[3], a} + {b[3], b};
assign result = exact[3:0];
assign overflow = (a[3] == b[3]) && (result[3] != a[3]);

El ejemplo suma dos operandos signed sin acarreo de entrada. Conserva en exact la suma de cinco bits y comprueba el signo del resultado reducido.

El valor inicial es 11111010. Observe que unsigned 250 y signed −6 comparten los mismos bits. Al cambiar b7, las interpretaciones varían en sentidos opuestos.

Cómo interpretar el signo de los mismos ocho bits

11111010 → unsigned 250 · signed -6 · hex 0xFA

Carry y overflow signed son distintos

V=aN−1⊕bN−1‾ (sN−1⊕aN−1)V=\overline{a_{N-1}\oplus b_{N-1}}\,(s_{N-1}\oplus a_{N-1})

Hay overflow si se suman valores del mismo signo y cambia el signo del resultado. En cuatro bits, 7+37+3 se almacena como 1010, que parece -6; −8+(−1)-8+(-1) queda como 0111, que parece +7. Sumar dos valores de signos opuestos no produce este exceso de rango.

Mezclar signed y unsigned dificulta razonar sobre comparación y extensión. Especifique ancho y signo de ambos operandos e incluya mínimo, -1, 0 y máximo en las pruebas límite.

Inténtalo tú

En signed de 4 bits, calcule los bits almacenados y el overflow de −3+(−4)-3+(-4) y 5+55+5. Explique también qué ocurre al negar −8-8.

Leer la explicación

−7-7 es 1001, sin overflow. 10 queda fuera del rango y se almacena como 1010 (-6), con overflow. Invertir -8 y sumar 1 vuelve a dejar 1000, porque +8 no se representa. No debe usarse ese resultado como valor absoluto correcto.

Tu elección se aplica a este navegador. Puedes cambiarla en el pie de página.