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.
Las lecciones se pueden leer gratis. Inscríbete para guardar el progreso.
Cambia el peso del bit más significativo
Un entero de 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í:
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, 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.
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.
11111010 → unsigned 250 · signed -6 · hex 0xFA
Carry y overflow signed son distintos
Hay overflow si se suman valores del mismo signo y cambia el signo del resultado. En cuatro bits, se almacena como 1010, que parece -6; 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 y . Explique también qué ocurre al negar .
Leer la explicación
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.