2012-03-30 9 views
3

Ich bin ein wenig verloren auf diesem. Ich brauche zwei Bruchteilbits Wie die 0.(a-1)(a-2)Zweierkomplementdarstellung von Brüchen?

verwenden, jetzt kann ich .00 .01 .10 und .11 Aber ich brauche negative Zahlen (in 2-Komplement) auch, so würde .10-.5 sein? oder wäre es -.25? Das gleiche mit .11, das wäre -.75? oder wäre es -.5? Ich bin mir ziemlich sicher, dass es in beiden Fällen Ersteres wäre, aber ich bin nicht ganz positiv.

+2

PS +1 für das "positive" Wortspiel. :-) –

Antwort

5

In der Zweierkomplement-Notation werden alle höchstwertigen Bits einer negativen Zahl auf 1 gesetzt. Angenommen, Sie speichern diese Zahlen als 8 Bits, mit 2 rechts vom "Binärpunkt".

Per Definition x + -x = 0, so können wir schreiben:

0.5 + -0.5 = 0.10 + 111111.10 = 0 // -0.5 = 111111.10 
0.25 + -0.25 = 0.01 + 111111.11 = 0 // -0.25 = 111111.11 
0.75 + -0.75 = 0.11 + 111111.01 = 0 // -0.75 = 111111.01 

und so weiter.

Verwendung von 8 Bits wie diese, die größte Zahl, die Sie speichern können, ist

011111.11 = 31.75 

die am wenigsten positive Zahl ist

000000.01 = 0.25 

die am wenigsten negative Zahl ist

111111.11 = -0.25 

und der kleinste (das heißt der negativste) ist

100000.00 = -32 
+1

Danke, das war am nächsten, aber ich habe es herausgefunden ... '00 => 0 => 0/4 => 0 01 => 1 => 1/4 =>. 25 10 => - 2 => - 2/4 => -. 5 11 => - 1 => - 1/4 => -. 25' –

0

Eine in Zweierkomplement gespeicherte Zahl invertiert das Vorzeichen der höchsten Bitgröße (so dass beispielsweise für eine 16-Bit-Zahl das obere Bit -32768 statt +32768 ist). Alle anderen Bits verhalten sich wie normal. Folglich sollte das obere Wort jeder Zahl als Zweierkomplement betrachtet werden, wenn Mathe an Mehrwortnummern ausgeführt wird (da das oberste Bit das oberste Bit der Gesamtanzahl ist), aber alle anderen Wörter in jeder Zahl sollten betrachtet werden als nicht signierte Mengen.

Zum Beispiel hat eine 16-Bit-Zweierkomplementnummer Werte (-32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2 und 1). In zwei 8-Bit-Teile aufgeteilt, haben diese Teile Platzwerte (-32768, 16384, 8192, 4096, 2048, 1024, 512 und 256); und (128, 64, 32, 16, 8, 4, 2 und 1). Der erste Satz von Werten ist in einer Zweierkomplement-8-Bit-Zahl, mal 256; der letztere Satz ist eine vorzeichenlose 8-Bit-Zahl.

+1

Danke ... aber das hilft überhaupt nicht ... –

+0

Wenn Ihre Nummer unsigned wäre, hätten Ihre Bits Werte (+1/2) und (+1/4). Für das Zweierkomplement-Format klappen Sie das Vorzeichen des oberen Bits um, so dass sie (-1/2) und (+1/4) sind. Die verfügbaren Werte sind dann 0, 1/4, -1/2 und -1/4. – supercat

1

es sehen auf diese Weise:

Sie normale binäre Darstellung haben

der 8-Bit-Worte annehmen lassen ...

das erste Bit (MSB) 128 den Wert, der zweite 64, und so weiter ...

mit anderen Worten das erste Bit (MSB) ist 2^7 ... das zweite Bit 2^6 ... und das letzte Bit ist 2^0

Jetzt können wir annehmen, dass unser 8-Bit-Wort 2 Dezimalstellen hat ....

wir jetzt mit dem ersten Bit (MSB) 2^5 und enden mit dem letzten Bit beeing 2^-2

keine Magie hier ...

nun, dass in binäres Komplement zu aktivieren: einfach negieren den Wert des ersten Bits

so anstelle von 2^5, es wäre -2^5

so in der Basis 10 -0.75 binäres Komplement wäre
111111,01 ...
(1 * (- 32) + 1 * 16 + 1 * 8 + 1 * 4 + 1 * 2 + 1 * 1 + 0 * 0,5 + 1 * 0,25)
(1 * (- 2^5) + 1 * 2^4 + 1 * 2^3 + 1 * 2^2 + 1 * 2^1 + 1 * 2^0 + 0 * 2^(- 1) + 1 * 2^(- 2))