Forum: PC-Programmierung Zweiekomplement 32768


von Johann (Gast)


Lesenswert?

Hallo,

ist eigentlich die Zahl 32768 im Zweierkomplement die -0.
Ab >32768 fangen ja erst die negativen an.
<32768 sind die positiven.
Also muss 32768 ->0 sein

von µder Coder (Gast)


Lesenswert?

Johann schrieb:
> ist eigentlich die Zahl 32768 im Zweierkomplement die -0.

Nein. Eine -0 gibt es im Zweierkomplement nicht.

> Ab >32768 fangen ja erst die negativen an.

Nein, sie fangen ab 32768 an. Im Zweierkomplement entspricht das der 
-32768.

von Johann (Gast)


Lesenswert?

Aha klingt logisch

von Karl H. (kbuchegg)


Lesenswert?

Johann schrieb:
> Aha klingt logisch

:-)

Ich glaube nicht, das du das verstanden hast :-)

Lass uns mal auf 4 Bit Zahlen gehen, dann rechnet es sich leichter. Das 
Prinzip ist identisch bei allen Bitzahlen.

2-er Komplement bedeutet, dass es 1 Bit gibt, das höchstwertige, welches 
eine Aussage gestattet, ob die Zahl positiv oder negativ ist.
Bit == 0   -> Zahl ist positiv
Bit == 1   -> Zahl ist negativ

Um das jeweilige Negative einer Zahl zu erhalten wird die Vorschrift 
ausgeführt:
  Alle Bits umdrehen (aus 0 wird 1, aus 1 wird 0)
  und noch 1 addieren

die Zahl 0 zb hat mit 4 Bit (1 Signbit + 3 Nutzbits) das Bitmuster

    0000

das 2-er Komplement davon ist

    0000      Original
              alle Bits umgedreht         1111
              und noch 1 dazu             0000

0 ist also in Binärdarstellung sein eigenes 2-er Komplement

Was ist mit den restlichen, zunächst positiven, Zahlen?

    001      1
    010      2
    011      3
    100      4
    101      5
    110      6
    111      7

ihre 2-er Komplemente (und damit die jeweilige negative Zahl) lauten

    0001   1       ->   1111   -1
    0010   2       ->   1110   -2
    0011   3       ->   1101   -3
    0100   4       ->   1100   -4
    0101   5       ->   1011   -5
    0110   6       ->   1010   -6
    0111   7       ->   1001   -7

nun gibt es aber noch ein mögliches Bitmuster  1000
da das MSB 1 ist, handelt es sich um eine negative Zahl, welche?

(um von einer negativen Zahl zur entsprechenden positiven zu kommen, 
wendet man einfach wieder das 2-er Komplement an)

    1000    Original
            alle Bits umdrehen    0111
            und noch 1 dazu       1000

seltsam.
Beim erhaltenen Bitmuster handelt es sich um die Zahl die nach +7 kommen 
müsste. Das wäre eigentlich die +8. Allerdings ist das Ergebnis in 2-er 
Komplement-Form wieder eine negative Zahl.
Das liegt daran, das +8 mit nur 3 Bits nicht darstellbar ist.
Als -8 hingegen ist das darstellbar. Das Bitmuster für 1000 passt 
wunderbar genau in die Reihe der Bitmuster für negative Zahlen als die 
nächste Zahl nach -7.
1000 ist daher -8

In gewisser Weise ist das Analog zum 0-Fall. 0 ist, genauso wie -8 sein 
eigenes 2-er Komplement.

Der Zahlenbereich aller Zahlen, die in 2-er Komplementdarstellung mit 4 
Bits darstellbar ist, lautet daher -8 bis +7

Ja, der ist asymetrisch! In den negativen Zahlen gibt es eine Wert mehr! 
Dies deshalb weil 0 in 2-er Komplementdarstellung als positive Zahl 
gewertet wird. Wird das berücksichtigt: dann haben wir 8 Stück negative 
Zahlen und 8 Stück ( 0 plus 1 bis 7) positive Zahlen.

von Johann (Gast)


Lesenswert?

Aha,danke schön erklärt jetzt hab ich verstanden

von (prx) A. K. (prx)


Lesenswert?

Johann schrieb:

> ist eigentlich die Zahl 32768 im Zweierkomplement die -0.

Nur in sign/magnitude Darstellung. Die ist im Fliesskommaformat sehr 
gebräuchlich, andernorts aber ausgestorben. Ansonsten gibt es eine -0 
noch im Einerkomplement, aber das ist noch toter.

von Andreas F. (aferber)


Lesenswert?

A. K. schrieb:
> Ansonsten gibt es eine -0
> noch im Einerkomplement, aber das ist noch toter.

Als von der Hardware genutzte Darstellung vielleicht, benutzt wird es 
aber Tag für Tag sehr häufig. Bei der Berechnung von IP-, TCP und 
UDP-Prüfsummen wird Einerkomplement-Arithmetik verwendet.

Andreas

von (prx) A. K. (prx)


Lesenswert?

Weiss ich, aber hier ging es nicht um die Arithmetik, sondern um die 
Zahlendarstellung. Und da ist das Einerkomplement deutlich toter als 
sign/magnitude. Selbst Seymor Cray war auf seine alten Tage davon 
abgekommen.

von Reinhard Kern (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Ja, der ist asymetrisch! In den negativen Zahlen gibt es eine Wert mehr!

Hallo,

das ist ja schon von vornherein klar: für jede Zahlenlänge n gibt es 2^n 
mögliche Werte, also eine gerade Zahl. Ist eine davon 0, so können die 
übrigen nicht in 2 gleich grosse Gruppen eingeteilt werden.

Bei ternärer Darstellung wäre das anders, 3^4 = 81, da könnte man 0 und 
je 40 positive und negative Zahlen darstellen.

Gruss Reinhard

von Rolf Magnus (Gast)


Lesenswert?

Reinhard Kern schrieb:
> Ist eine davon 0, so können die übrigen nicht in 2 gleich grosse Gruppen
> eingeteilt werden.

Die Annahme des OP war aber, daß zwei davon die 0 sind.

von Reinhard Kern (Gast)


Lesenswert?

Rolf Magnus schrieb:
> Die Annahme des OP war aber, daß zwei davon die 0 sind.

so ganz unvorbereitet aus dem Bauch: eine Gruppe enthält genau ein 
neutrales Element, und wenn die n-bittigen Zahlen keine Gruppe wären 
könnte man nicht damit rechnen.

Gruss Reinhard

von (prx) A. K. (prx)


Lesenswert?

Der Mathematiker rechnet auch nicht im Einerkomplement oder in 
sign/magnitude Darstellung. Meistens rechnet er garnicht, er weiss nur 
wie man es tut. Der Computer wiederum interessiert sich für Gruppen nur 
in der Benutzerverwaltung, weiss glücklicherweise nicht, dass er 
garnicht rechnen kann und tut es deshalb trotzdem.

Tatsächlich gab es noch in den 70ern unter den grossen Eisen welche, die 
im Einerkomplement arbeiteten und infolgedessen mit zwei Nullen zurecht 
kommen mussten.

Des Rätsels Lösung: Mathematisch existiert nach wie vor nur eine Null, 
aber diese hat 2 Darstellungen.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Reinhard Kern schrieb:
> Rolf Magnus schrieb:
>> Die Annahme des OP war aber, daß zwei davon die 0 sind.
>
> so ganz unvorbereitet aus dem Bauch: eine Gruppe enthält genau ein
> neutrales Element, und wenn die n-bittigen Zahlen keine Gruppe wären
> könnte man nicht damit rechnen.

In dem Fall von +0 und -0 hat die 0 eben zwei Darstellungen. Die 
Darstellung muss ja nicht eindeutig sein, was allerdings zB beim Test 
auf Gleichheit zu berücksichtigen ist. Die 0 besteht also aus der Menge 
{-0, +0}.

Ähnliches hat man zB in Z mod n*Z. Wenn man sowas schreibt wie 0 = n 
(mod n) dann sind diese 0 und n  zwei Repräsentanten der gleichen 
Äquivalenzklasse, nämlich von nZ. die 1 (und ebende n+1 oder 1-n etc, 
wären Repräsentanten von nZ+1). Zumindest ist das die algebraische 
Sichtweise.

Übrigens kann man auch Rechenoperationen ausführen, wenn es keine Gruppe 
ist. Beispiel: Float-Arithmetik auf Rechnern. Das ist noch nichtmal ne 
Halbgruppe, weil idR (a*b)*c ≠ a*(b*c). Dennoch kann man darin rechnen, 
muss aber die Tücken und Ösen kennen und wissen wie man sie umschifft.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.