Altifigence Academy

8 / 37 · Konzept

Zweierkomplement, Vorzeichenerweiterung und Overflow

Signed-Interpretation und Additionsoverflow durch Gleichungen und Gegenbeispiele unterscheiden.

Das höchstwertige Bit erhält ein anderes Gewicht

Eine NN-Bit-ZweierkomplementzahlZweierkomplement Darstellung vorzeichenbehafteter Ganzzahlen mit fester Bitbreite. n Bit reichen von −2^(n−1) bis 2^(n−1)−1. wird so interpretiert:

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

Die vier Bits 1010 bedeuten unsignedUnsigned Interpretation einer Bitfolge als nichtnegative Ganzzahl. Der n-Bit-Bereich ist 0 bis 2^n−1 und kann sich von der signed-Interpretation derselben Bits unterscheiden. Mehr erfahren 10, signed −6. Man darf nicht das Vorzeichenbit abtrennen und den Rest als Betrag lesen. −x-x entsteht bei fester Breite durch BitinversionInversion NOT vertauscht 0 und 1. Ein Überstrich wendet NOT auf den gesamten darunterstehenden Ausdruck an. Mehr erfahren und Addition von 1; zum Minimum −8 existiert aber kein +8 im selben 4-Bit-signed-Bereich.

Erweiterung muss den Wert erhalten

Unsigned wird links mit Nullen erweitert, signed mit dem bisherigen Vorzeichenbit. Aus 1010 wird mit 00001010 der Wert +10, mit 11111010 der Wert −6. Dieselben Bits zu verbreitern verlangt je nach Interpretation unterschiedliche Schaltungen.

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]);

Das Beispiel addiert zwei signed Operanden ohne carry-Eingang. exact bewahrt die 5-Bit-Summe; geprüft wird, ob das Vorzeichen des verkürzten Ergebnisses stimmt.

Der Startwert ist 11111010. Beachten Sie, dass unsigned 250 und signed −6 dieselben Bits haben. Das Umschalten von b7 verändert beide Interpretationen in entgegengesetzte Richtungen.

Das Vorzeichen derselben acht Bits interpretieren

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

Carry und signed Overflow unterscheiden sich

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})

Werden gleichnamige Vorzeichen addiert und wechselt das Ergebnisvorzeichen, liegt Overflow vor. In vier Bit wird 7+37+3 als 1010, also scheinbar −6, gespeichert; −8+(−1)-8+(-1) als 0111, scheinbar +7. Bei zwei verschieden vorzeichenbehafteten Zahlen entsteht diese Bereichsüberschreitung nicht.

Gemischte signed/unsigned-RTL-Ausdrücke erschweren Vergleichs- und Erweiterungsregeln. Geben Sie Breite und Vorzeichen beider Operanden explizit an und testen Sie Minimum, −1, 0 und Maximum.

Selbst ausprobieren

Bestimmen Sie gespeicherte Bits und Overflow für −3+(−4)-3+(-4) und 5+55+5 in vier Bit signed. Erklären Sie auch die Negation von −8-8.

Erklärung lesen

−7-7 ist 1001 ohne Overflow. 10 liegt außerhalb des Bereichs und wird als 1010 (−6) gespeichert: Overflow. Inversion von −8 plus 1 ergibt wieder 1000, da +8 nicht darstellbar ist. Dies darf nicht als korrekte Betragsberechnung verwendet werden.

Deine Auswahl gilt für diesen Browser. Du kannst sie jederzeit in der Fußzeile ändern.