Frage

Ich habe Zahlen unterzeichnet (2s Komplement), die in 32-Bit-Integer, und ich möchte 16-Bit-Felder aus ihnen extrahieren. Ist es wahr, dass, wenn ich die niedrigen 16 Bits von einem 32-Bit-Zahl mit Vorzeichen extrahieren, wird das Ergebnis korrekt sein, so lange wie das Original (32-Bit) Zahl passt in 16 Bit?

Für positive Zahlen ist es trivialerweise wahr, und es scheint, dass auch für Negative. Aber es kann nachgewiesen werden?

Vielen Dank im Voraus

War es hilfreich?

Lösung

Ja, in zwei Komplement die Vorzeichenbits „den ganzen Weg“ nach links erstrecken. Wenn Sie einen kurzen zu einem signed int unterzeichnet gegossen, dann ist die Zahl „Zeichen erweitert“ und hat der gleiche Wert.

Beispiel: Nibble (-2) = 1110 => Byte(-2) = 1111_1110

Offensichtlich ist das Gegenteil es auch wahr, wenn Sie mindestens ein Vorzeichenbit erfassen dann wird der Wert der Zahl bleibt unverändert.

Andere Tipps

Aus meinem (zweiten) Lesen Ihrer Frage, ist es nicht so scheinen, wenn Sie brauchen, um „zu extrahieren“ alle Bits, sondern die ganze Zahl umwandeln?

d. etwas tun, wie folgt aus:

int negative = -4711;
short x = (short) negative;

In diesem Fall wird der Compiler sicherstellen, dass so viel wie möglich von der Präzision der ursprünglichen Zahl wird in der Zuordnung umgewandelt. Dies wäre der Fall, auch wenn die zugrunde liegende Hardware nicht 2 wurde mit: Komplement. Wenn ja, dann ist dies wahrscheinlich nur ein Abschneiden sein, wie Motti erläutert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top