Diskussion:Zweierkomplement

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Motivation[Quelltext bearbeiten]

Unter Motivation ist ein Bild eingefügt mit dem Inhalt -2^n-1. Es müsste eine Klammer hinzugefügt werden, damit es bei geraden Exponenten bei einer negativen Zahl bleibt. -(2^n-1) wäre allgemein korrekt und nicht nur bei ungeraden Ergebnissen für n-1. (nicht signierter Beitrag von 193.158.111.5 (Diskussion) 16:09, 24. Feb. 2015 (CET))Beantworten

Binärsystem[Quelltext bearbeiten]

Leider beschreibt dieser Artikel nur das Zweierkomplement im Binärsystem. Es gibt jedoch für alle Stellenwersysteme ein Zweierkomplement. War gerade auf der suche nach einer allgemeinen Definition, bis jetzt leider ohne Erfolg.

So besser? :) --SirJective 00:59, 21. Feb 2006 (CET)


Ich denke, dass Zweierkomplement dient nicht nur dem Betriebswerke Netwerk Untericht, sondern auch der Fortplfanznung.

Fehler???[Quelltext bearbeiten]

Kann es sein das dort ein Fehler ist???? Unter "Darstellung und Umwandlung aus dem Dezimalsystem" ,kann man sich diese drei Schritte anschauen... kann ja sein, dass es bei -4 geht! Doch was ist mit der -36?

Nach Anweisung:

1. Vorzeichen ignorieren und ins Binärsystem umrechnen: 36(10) = 00100100(2)

2. Invertieren, da negativ: 11011011

3. Eins addieren, da negativ: 11011011 + 00000001 = 11011010


Doch meines Erachtens ist 11011010 als Zweierkomplement nicht -36 ,sondern -38! -36 müsste 11011100 sein.... oder? Bitte um Korrektur (also auch mich, wenn ich falsch liege)!!! --Müller Tobias 20:52, 14. Jul 2006 (CEST)

Sorry 11011011 + 00000001 ist 11011100 geht also doch! --Müller Tobias 16:58, 20. Jul 2006 (CEST)
"Üblicherweise wird dies erreicht, indem sämtliche Zahlen eine konstante Stellenzahl haben und bei Bedarf mit führenden Nullen aufgefüllt werden."

Die Auffüllung mit Nullen trifft bei positiven Zahlen zu, aber werden negative Zahlen nicht mit Einsen aufgefüllt?

Ja, wenn die Zahlen im Zweierkomplement dargestellt sind. In dem Abschnitt geht es aber grade darum, wie negative Zahlen binär dargestellt werden können, wenn kein Zweierkomplement verwendet wird. In dem Fall wird gerne das eigentlich höchstwertigste Bit als Vorzeichen verwendet, die Darstellung der Zahlen bleibt davon abgesehen aber gleich. Darum ist das doch kein Fehler im Artikel. (Ich musste selber aber auch erst zweimal lesen, um das zu verstehen... ;-) ) GGShinobi 12:13, 7. Nov. 2009 (CET)Beantworten

Nein, da geht es schon um das Zweierkomplement. Aber oben hat anscheinend jemand nicht richtig addiert:

3. Eins addieren, da negativ: 11011011 + 00000001 = 11011010

Meiner unbescheidenen Meinung nach sollte das vielmehr so heißen:

3. Eins addieren, da negativ: 11011011 + 00000001 = 11011100 = -38(10), wie gewünscht. --PeterFrankfurt 01:52, 8. Nov. 2009 (CET)Beantworten

Namensherleitung *Einer*komplement und *Zweier*komplement[Quelltext bearbeiten]

Woher stammen die Bezeichnungen *Einer*komplement im Gegensatz zum *Zweier*komplement? --Sulai 20:30, 7. Mai 2007 (CEST)Beantworten

Ich kann leider nicht sicher sagen woher die Namen kommen, aber beim Einerkomplement kann die 0 zweifach repräsentiert werden, beim Zweierkomplement jedoch nur einfach. Das Einerkomplement einer n-Bit Dezimalzahl x kann man auch folgendermaßen erhalten:
  • Ist die Zahl positiv? -> x ins Binärsystem umwandeln und links mit Nullen auffüllen, bis die Zahl n Stellen hat
  • Falls nicht ->
Eventuell hat das Einerkomplement wegen der -1 seinen Namen erhalten.
Das Zweierkomplement erhält man wie folgt:
  • Ist die Zahl positiv? -> x ins Binärsystem umwandeln und links mit Nullen auffüllen, bis die Zahl n Stellen hat
  • Falls nicht:
--MartinThoma 13:13, 9. Feb. 2010 (CET)Beantworten

Fehler: Rechenoperationen -> Bereichsüberlauf ?[Quelltext bearbeiten]

Ist es bei der Zweierkomplement-Berechnung nicht so, dass es nur zu einem Bereichsüberlauf kommt, wenn das Carry-In und das Carry-Out unterschiedlich ist? Im Text heißt es "Zur Erkennung des Fehlers reicht es also aus, die Vorzeichenbits zu vergleichen." - Das alleine sagt doch aber nichts über die Richtigkeit des Ergebnisses, oder?

Andere Umwandlung[Quelltext bearbeiten]

Ich hätte noch eine Umwandlung von Hand von dezimal nach Zweierkomplement anzubieten:

  1. Wenn Zahl positiv (+4), einfach so in Binärdarstellung umrechnen.
  2. Bei negativ ihren Betrag (bei 8 Bit) von 256 (=2 hoch 8) abziehen und das in Binärdarstellung umrechnen: 256-4=252=11111100b.

In meinen Augen ist dies einfacher als das im Artikel vorgeführte Verfahren. --PeterFrankfurt 16:55, 5. Feb. 2008 (CET)Beantworten

Rechnen mit dezimalen Zahlen mag ja einfacher sein. Im Artikel geht es aber explizit um das Rechnen mit Binärzahlen. --213.221.250.85 13:24, 7. Dez. 2010 (CET)Beantworten

Borrow-Bit[Quelltext bearbeiten]

Vielleicht könnte man hier auch das Konzept des "Borrow-Bits" unterbringen, das bei der Subtraktion eine Umfunktionierung des Carry-Bits darstellt und so beim 6502-Prozessor implementiert ist (dort wird es weiterhin C für Carry-Bit genannt, aber wie ein Borrow-Bit behandelt). Dazu wird das Borrow- bzw. Carry-Bit (bei 8-Bit-Arithmetik) als neuntes Bit behandelt und vor einer Subtraktion vorsorglich gesetzt, also "geborgt". Nach durchgeführter Subtraktion, die durch dieses gesetzte neunte Bit immer ohne Unterlauf glückt, schaut man nach, ob das neunte Bit immer noch gesetzt ist oder nicht. Ist es gesetzt geblieben, ist das Ergebnis positiv, im anderen Fall negativ, und wegen der geschickten Definition des Zweierkomplements ist das 8-Bit-Ergebnis dann auch schon korrekt dargestellt und muss nicht nachbehandelt werden. --PeterFrankfurt 16:55, 5. Feb. 2008 (CET)Beantworten

Fehler bei Rechenoperationen?[Quelltext bearbeiten]

Bei der Rechnung 4 + (-4) müsste das doch so aussehen:

+4 +(− 4) = 0:

          00000100
       +  11111100  
Übertrag 100000000 <-- der Übertrag "schleppt" sich durch.
         ---------
       =  00000000
Das gesetzte Carry-Bit ist sogar lebenswichtig. Man bedenke den Fall, dass man in höherer Genauigkeit rechnet und sich dieses 00- und FF-Muster in den beiden Summanden noch ein oder mehrere Bytes weiter nach links erstreckt. Erst durch das Carry-Bit werden dann auch diese höherwertigen Bytes alle auf 0 hochaddiert. Ganz am Schluss, ganz links muss man das Carry-Bit dann tatsächlich aktiv ignorieren oder sonstwie sonderbehandeln. --PeterFrankfurt 00:25, 11. Mär. 2008 (CET)Beantworten
Bei Zweierkomplement gibt es kein "klassisches" Carry mehr, was "mitgeschleppt" wird. Vorallem wäre dann auch ein "Borrow"-Bit nötig. Sondern das nennt sich Vorzeichenerweiterung und diese (triviale, aber wesentliche) Vorarbeit findet vor der eigentlichen Rechenoperation statt. "Spezialfälle" wie unterschiedlich breite Summanden, Multiplikationen im Zweierkomplementär und deren Vorzeichenerweiterungen, oder die bei Festkommadarstellungen auftauchenden Fragen wie sich durch die Rechenoperation die Stelle des Kommapunktes versetzen mag, (für's erste) mal weggelassen.--wdwd 11:43, 13. Sep. 2008 (CEST)Beantworten
Oh, das Borrow-Bit! Mir als altem 6502-Fanatiker ist das natürlich geläufig, und das mit der Vorbereitung auch: immer mit SEC setzen, bevor man eine Subtraktion beginnt. Aber ist das wirklich signifikant für das Zweierkomplement oder nur allgemeiner für binäre Vorzeichenbehandlung? --PeterFrankfurt 16:04, 13. Sep. 2008 (CEST)Beantworten
Eine "explizite" Vorzeichenbehandlung bzw. Übertrag gibt es im Zweierkomplement eigentlich nicht. Bestenfalls gibt es, je nachdem wie "wasserdicht" die Implementierungen sind, Fehlerzustände - wenn sich die gebildeten Zahlenwerte in bestimmten Bitbreiten nicht mehr darstellen lassen. Eventuell kommt dieser Umstand im Artikel nicht klar genug hervor? Hab das mit der Stellenreduktion und wegschippeln von high-side-bits auch noch versucht etwas klarer darzustellen. Im Rahmen der Multiplikation wird die bei Zweierkomplementdarstellung ganz wesentliche Vorzeichenerweiterung sehr deutlich. --wdwd 15:03, 14. Sep. 2008 (CEST)Beantworten
Was bei der neuen Formulierung unter dem Begriff Überlauf erwähnt wird, ist das, was beim 6502 das Overflow-Bit erledigt, nämlich den Überlauf in das (und nicht aus dem) höchste(n) Bit. Wenn konkret zwei 7-Bit-Zahlen addiert werden (die beide positiv sein sollen), so dass ein Überlauf in das achte Bit entsteht, sieht das Ergebnis plötzlich negativ aus. Das muss aber weiterhin als positive Zahl behandelt werden, dazu zeigt der 6502 diesen Fall durch das O-Bit an und der Programmierer muss bei vorzeichenbehafteter Rechnung bei jeder Addition oder Subtraktion auf diesen Fall prüfen. Das sollte man an jener Stelle, die mir etwas knapp erscheint, vielleicht noch weiter ausführen. Soll ich? --PeterFrankfurt 19:45, 14. Sep. 2008 (CEST)Beantworten
Beim Zweierkomplement ist das Überlauf-Bit eher ein Fehlerbit und nicht wie das Carry gedacht um damit "weiterzurechnen". Wird schaltungstechnisch durch ein XOR der beiden obersten Stellen (Bits) gewonnen. Sind diese beiden obersten Bit unterschiedlich, muss das Ergebnis entweder eine Stelle mehr umfassen oder es ist falsch. Wenn es zu unklar im Artikel dargestellt ist, editiere es ruhig.--wdwd 10:43, 16. Sep. 2008 (CEST)Beantworten

Ist es nicht so, dass 1er- und 2er-Komplement kein Vorzeichenbit besitzen? Füllt man die entsprechende positive Zahl vor mit Nullen auf, so kippt das erste Bit beim Kippen (logisch ;)) sowieso mit, ist also "von allein" 1. Das das erste Bit als Vorzeichenbit betrachtet werden kann, liegt doch nur daran, dass nur 7 Bit effektiv für den ZahlenWERT genutzt werden können und das 8te Bit immer mitkippt, wenn man die Zahl ins negative umwandelt.

Ich kann da leider nicht ganz folgen. Einerseits kann man das 2er-Komplement tatsächlich auch so betrachten, dass negative Zahlen einfach um 256 (bei 8 Bit-Zahlen) erhöht werden und das MSB nur indirekt zum Vorzeichenbit wird, indem es bei positiven Zahlen dann nie, bei negativen immer gesetzt ist. - Wenn man positive Zahlen vorn mit Nullen auffüllt, bleibt dort alles Null, oder was meinst Du da? --PeterFrankfurt

Sichtung[Quelltext bearbeiten]

Hallo, ich bitte um Sichtung des Artikels von jemanden der weiß welche Version richtig ist. Mir ist es nicht möglich, in diesem Artikel zu unterscheiden, welche Version bzw Zahl richtig ist. LG LiQuidator ;) Disk 22:04, 12. Sep. 2008 (CEST)Beantworten

Done. Es war allerdings etwas mehr nötig.--wdwd 11:30, 13. Sep. 2008 (CEST)Beantworten

Übungsaufgabe für Informatikstudenten[Quelltext bearbeiten]

Übungsaufgabe für Informatikstudenten: zeige, dass die Verarbeitung von Zahlen im Zweierkomplement einer Bitzahl ein Restklassenring ist, bei die negativen Repräsentanten der Restklasse identisch mit Repräsentanten desselben Restringes mit vorzeichenfreier Darstellung der Repräsanten sind. Daher kann das Rechenwerk für vorzeichenfreie Ganzzahl ohne Änderung für Zahlen im Zweierkomplement eingesetzt werden - schon algebraisch ist es dasselbe, auch wenn im Artikel darauf nicht eingegangen wird. 78.53.39.231 00:21, 7. Jan. 2009 (CET)Beantworten

Frage zur Multiplikation[Quelltext bearbeiten]

Ich kann die Bemerkung "die letzte Zeile muß subtrahiert werden" überhaupt nicht nachvollziehen, zumal ich das Beispiel unsinnig finde.

-3 * -7 ist nicht in 4 Bit inklusive Vorzeichen darstellbar.

Für -3 * -7 brauche ich mindestens 5 Bit plus Vorzeichen. Dann habe ich einen Zahlbereich von -32 bis +31.

Oder im Restklassenring (um mal an die Übungsaufgabe anzuknüpfen):

5 bit + Vorzeichen sind 6 bit, wir rechnen also modulo 64.

3 ist dann: 000011 alle Bits negieren: 111100 +1: 111101

Kontrolle: 111101 ist dezimal 61, also kongruent -3 mod 64

-7 ist dann: 000111 alle Bits negieren: 111000 +1: 111001

Kontrolle: 111001 ist dezimal 57, also kongruent -7 mod 64.

So. Und jetzt multiplizieere ich 61*57 = 3477 Kontrolle: 3477 - 21 = 3456 / 64 = 54.

Dann brauche ich zur Multiplikation zunächst 12 Stellen und habe als Produkt:

110110010101

Da ich nur 6 Stellen betrachte (5 Bit + Vorzeichen) sind nur die letzten 6 relevant: 010101 = +21.

Ich bin da vor einem Jahr schon mal drüber gestolpert und habe es nicht verstanden....

Bitte um Kommentar. --Bosaudf 12:11, 28. Dez. 2009 (CET)Beantworten

Hi, nur mal zu dem Punkt nicht in 4 Bit darstellbar. -7 ist im Zweierkomplement- "1001" und -3 entspricht "1101". -7 ist nicht "000111", egal wie viele Stellen Du nimmst, da eine negative Zahl im Zweierkomplement immer mit einer "1" am Anfang beginnen muss. "000111" entspricht +7, und kann auch mit 4 Bit dargestellt werden: "0111".--wdwd 12:35, 28. Dez. 2009 (CET)Beantworten
Du hast den Sinn meiner Anmerkung nicht verstanden. Es mag sein, daß -3 und -7 in 4 bit darstellbar sind, aber schon das Produkt ist nicht mehr in 4 bit darstellbar.

Auf den Punkt: Das Beispiel verläßt den gültigen Zahlenbereich. -3 * -4 ist in 4 Bit inklusive Vorzeichen nicht darstellbar, das gibt einen Überlauf. Und der fällt noch nicht mal als Fehler auf, denn wenn ich in einem Restklassenring rechne, lande ich natürlich immer innerhalb dieses Rings, der ist ja bzgl. Multiplikation abgeschlossen. Insofern kommt da immer etwas heraus und es gibt da keine Fehlerklingel, die bei einem Rechenfehler läutet.

Das Ergebnis, 10101, ist denn auch formal 21, nur: Was ist denn das in 4 bit inklusive Vorzeichen? Wenn ich mir die letzten 4 Bit anschaue, dann ist das 0101. Also +5. Und die 1 ganz vorn, die kann ich gar nicht deuten.

Und wenn ich das jetzt mal im Ring deute: 4 Bit mit Vorzeichen ist modulo 16, also entsprechen -3 13 mod 16 und -7 9 mod 16, dann rechne ich 13 * 9, das ist 117 und das ist kongruent 5 modulo 16.

Insofern paßt das alles ganz wunderbar zusammen - ist aber letztlich nicht wirklich sinnvoll, weil die ganze Deutung des Zweierkomplement IMHO nur dann wirklich hinhaut, wenn ich mich innerhalb des vereinbarten Zahlenbereichs bewege.--Bosaudf 14:11, 28. Dez. 2009 (CET)Beantworten

Hi, in aller Kürze: Bitte den Abschnitt Zweierkomplement#Vorzeichenerweiterung und nachfolgend zu beachten.--wdwd 14:43, 28. Dez. 2009 (CET)Beantworten
Ja bitte, aber was heißt denn das?

Das heißt doch, daß 10101 den Wertebereich überschreitet, und da das oberste Bit als Vorzeichen interpretiert wird, würde jetzt (was wieder ins System paßt) -11 ausgegeben. -11, 5 und 21 liegen im Restklassenring modulo 16 alle in derselben Klasse.

Oder was verstehe ich hier falsch? --Bosaudf 17:38, 28. Dez. 2009 (CET)Beantworten

Hi, etwas salopp: die Zahl 7 kann im dezimalen als 0000007 oder auch als 007 geschrieben werden, die vorlaufenden 0er haben keine Bedeutung, ausser dass sie Speicherplatz (für die Darstellung) belegen. Ebenso im binären System. Die Anzahl der (zusätzlichen) Stellen spielt keine Rolle, ausser dass es nicht besonders effizient ist mehr Stellen zu verwenden als unbedingt notwendig ist. Bei negativen Zahlen im Zweierkompl. verhält es sich ähnlich, nur das es dabei "vorlaufende" logische-1 keine Rolle spielen: "11111001" ist ident "1111111111001" ist ident wie "1001" und ist in allen Fällen gleich -7.
Bei der Multiplikation zweier Zahlen welche (minimal) n bzw. m binäre Stellen für ihre Darstellung benötigen, ist das Produkt n+m binäre Stellen (minimal) lang. Bei weniger Stellen wären Fehler (Über/Unterlauf) die Folge. Diese "Vorzeichenerweiterung" erweitert quasi die Anzahl der Stellen ohne was am Wert der Zahlen zu verändern. Im binären Zweierkompl. vervielfacht sie dabei nur das höchstwertige Bit.(lediglich durch die grössere Anzahl an Stellen wird bereits vor der Multipikation mehr Speicherplatz bzw. mehr elektrische Signalleitungen für die grössere Anzahl an Stellen/Bits und deren Darstellung benötigt).
Wenn ich es richtig erfasse, liegt der Fehler beim modulo, wobei Restklassenringe hier ja gar nicht vorkommen (auch im Artikel nicht): die Anzahl der Stellen zur Darstellung einer Zahl kann beim Zweierkompl. beliebig erweitert werden und ist nicht auf 4 Bit, 8 Bit oder was auch immer für eine Stellenanzahl (in Bit ausgedrückt) limitiert.--wdwd 19:30, 28. Dez. 2009 (CET)Beantworten
Hm. Also man hat hier ja indirekt mit der "Übungsaufgabe für Informatikstudenten" den Gedanken an Restklassenringe selber vertreten. Und ich denke auch, daß das die systematische Vorgehensweise ist, an das Zweierkomplement zu begründen.

Nun hänge ich mich ja vor allem an der Stelle auf, an der es heißt:


<zitat von der Seite>

+ 11100100   (1001 · 1, um zwei Stellen nach links verschoben und mit Vorzeichenerweiterung)
− 11001000   (1001 · 1, um drei Stellen nach links verschoben und mit Vorzeichenerweiterung)
==========

</zitat von der Seite>

Die Subtraktion dort verstehe ich überhaupt nicht.

Letztlich kann ich auch nich nachvollziehen, wie man die führende 1 oder 0 in einer Zweierkomplementzahl erkennen soll. In konkreten Rechenwerken arbeitet man meines Wissens mit einer festen Stellenzahl. Und damit ist die führende Stelle im Register / Speicher doch faktisch als Vorzeichenstelle ausgezeichnet, oder?

--Bosaudf 22:06, 28. Dez. 2009 (CET)Beantworten

Hi,
  1. Restklassenring könnte man im Artikel eventuell noch als Thema aufnehmen, hat aber (nur aus meiner Sicht) wenig direkt mit Zweierkomplementärdarstellungsformat (was ja nur eine Darstellungsart von Zahlen ist) zu tun (und verkompliziert die Darstellung, inbesondere bei der Frage um bei diese "Stellenerweiterung")
  2. Die Sache mit der Multiplikation und warum da eine Subtraktion in der letzten Zeile drinnen steckt (Das Zitat von der Seite, als einer von mehreren möglichen Lösungswegen) fällt da quasi aus heiteren Himmel herunter ohne Erklärung wo das herkommt. Ist ein Punkt zur Erklärung im Artikel. Wenn Du ein wenig des Englischen mächtig bist, darf ich mal auf en:Two's_complement#Multiplication verweisen (dort sind auch andere Verfahren beschrieben).
  3. Die führenden Stellen werden einfach durch Duplizieren des obersten Bits erzeugt. "Erkannt" wird es, indem man das oberste Bit selektiert bzw. es mehrfach verschaltet. Ist das oberste Bit im Zustand '0' wird den erweiterten obersten Stellen auch nur lauter 0 als Inhalt hinzugefügt, sonst lauter 1. In Prozessoren (DSP, uC) arbeitet man mit meist fixen Bitbreiten (Stellenanzahl) was sich meist aus den Registerbreiten z.b. vom Accu ergibt. Nicht aber so in digitaler Signalverarbeitung direkt in Schaltungen, z.b. in ASIC oder FPGAs. Typisch z.b. FIR/IIR-Filter oder FFT-Algorithmen. In digitalen Schaltungen sind die Bitbreiten beliebig wählbar, z.b. auch 13 Bit oder 33 Bit Breite bei einer MAC-Einheit, und werden je nach Anforderung und Stufe gewählt.--wdwd 23:06, 28. Dez. 2009 (CET)Beantworten


Hallihallo.
  1. Den Restklassenring halte ich für wichtig, denn dort wird ja nun das Zweierkomplement erstmal richtig begründet.
  2. Zur Subtraktion ist mir zumindest die Begründung nicht klargeworden. Soweit ich den englischen Artikel gerade mal quergelesen habe, wird da deutlich, daß einer der Summanden im Rahmen der Multiplikation ein Artefakt ist, das vom Vorzeichenbit her stammt. Hast Du das auch so drin oder habe ich das überlesen?

Die Variante, mit einer festen Breite zu arbeiten und überzählige Stellen zu ignorieren, halte ich zumindest für einsichtiger.

Formal fällt mir das Zweierkomplement immer etwas schnell vom Himmel, ich fände es hilfreich, es vom Restklassenring her zu begründen. Dann würde auch deutlich, daß das "Vorzeichen" im Zweierkomplement eigentlich ein Artefakt ist. Denn der Gedanke ist doch, schlicht ohne Vorzeichen zu rechnen - ein Vorzeichen kommt doch immer erst bei der Umwandlung in Dezimalzahlen als Interpretation in die Sache rein. --Bosaudf 15:06, 29. Dez. 2009 (CET)Beantworten

Hi, ich hab mal versucht bei Punkt 2. und den Grund für diese Subtraktion (verbal) zu beschreiben. Ja, hab ich auch so, wobei mir persönlich die Beschreibung als Artefakt nicht gefällt. Weiss nicht ob meine Beschreibung da nun verständlicher ist. Formal lässt sich díe Subtraktion statt der Summationen in der letzten Zeile als Folge der Vorzeichenerweiterung sicher auch zeigen (ich hab auf die Schnelle nix darüber gefunden). Das Thema driftet dann halt schon etwas weg Richtung seichter Zahlentheorie.
Zu Punkt 1.: Wenn Du die Restklassenringe reinbringen willst inkl. einer etwas stärkeren formalen Beschreibung und Begründungen: Gerne. --wdwd 15:40, 29. Dez. 2009 (CET)Beantworten

Ich habe gerade nach etlichen Jahren (ich erschrecke selber, wie lange das gedauert hat) mal wieder reingesehen.

Besteht noch Interesse an einem Beitrag zum Thema Zweierkomplement und Restklassenringe?

Bosaudf (Diskussion) 19:49, 16. Jun. 2012 (CEST)Beantworten

Arithmetische Operation?[Quelltext bearbeiten]

In meiner bisherigen beruflichen Laufbahn (einschl. Studium 25 Jahre) habe ich noch nie gehört, daß das 2er-Komplement eine arithmetische Operation sei. Vielmehr ist es eine Repräsentationsform von Zahlen, ein Zahlenformat. Daher ist 2er-Komplementdarstellung sowas wie der weiße Schimmel, eigentlich heißt es nur im 2er-Komplement. Trotzdem hat sich die Bezeichnung 2er-Komplementdarstellung durchaus eingebürgert (ist wohl so wie mit dem LCD-Display).

Das 2er-Komplement wird gebildet durch die am Anfang im Artikel beschriebenen Operationen: Invertiern und 1 addieren. Aus meiner Tätigkeit als Hochschuldozent kann ich aber anmerken, daß die Verwendung von negieren an dieser Stelle im Artikel äußerst ungünstig ist. Zwar ist der Bgriff bezogen auf ein Bit, also die einzelne Binärstelle, hier nicht falsch, aber gerade im Zusammenhang mit dem 2er-Komplement kann diese Ausdrucksweise schnell zu Verwirrung führen. Die Prüfungsaufgaben, in denen das Invertieren einer Binärzahl und das Negieren im 2er-Komplement nicht unterschieden wurden, kann ich schon gar nicht mehr zählen.

Um es noch einmal zusammenzufassen: Eine arithmetische Funktion 2er-Komplement gibt es meiner Ansicht nach nicht. Richtig müßte die arithmetische Operation heißen: Negieren im 2er-Komplement. Oder wenn es klar ist, daß man sich im 2er-Komplement befindet, einfach nur: Negieren.

Zum als Referenz angführten Tietze/Schenk (Ich besitze zwar nur die 9. Auflage, gehe aber davon aus, daß sich bei der Behandlung des 2er-Komplemnets nichts wesentliches geändert hat): Der Tietze/Schenk verwendet auch die Bezeichnung 2er-Komplementdarstellung, aber er spricht nie von einer arithmetischen Operation "2er-Komplement". Man könnte aus der Weise wie der Tietze/Schenk die Bildung beschreibt so etwas wie eine arithmetischen Operation "2er-Komplement" konstruieren, aber das ist miener Ansicht nach vollkommen unüblich. Leider verwendet der Tietze/Schenk übrigens auch den Begriff Negation im Zusammenhang mit der Bildung des 2er-Komplements. Er macht das zwar formal völlig richtig bezogen auf jede einzelne Stelle, aber für Studenten ist das leider, wie gesagt, oft verwirrend.

Das englische Wikipedia stützt übrigens meine Auffassung zum 2er-Komplement. (nicht signierter Beitrag von 62.159.30.170 (Diskussion) 12:25, 29. Mär. 2011 (CEST)) Beantworten

Ja, die Formulierung/Beschreibung in der Einleitung ist ungut, habs mal grob ausgebssert. Ist offensichtlich mal im März 2009 reingerutscht. Auch das "Kochrezept" mit der Negation und +1 in der Einleitung ist deplatziert -> das ist 2 Abschnitte weiter unten bzw. einige Abschnitte später auch formal ausführlicher (und soweit korrekt) behandelt. Es muss nicht jedes Detail in der Einleitung stehen - diese soll eher groben Überblick darstellen. (und die Limitierung auf Ganze Zahlen in der Einleitung passte auch nicht)--wdwd 19:36, 29. Mär. 2011 (CEST)Beantworten
Ich denke schon, vorn im Artikel (vielleicht nicht gerade in der Einleitung) könnte erwähnt werden, dass das Zweierkomplement vor allem für ganze Zahlen verwendet wird. Im Abschnitt "Zweierkomplementdarstellung bei Festkommazahlen" wird ja erwähnt, dass bisher nur von ganzen Zahlen die Rede war. -- UKoch (Diskussion) 18:20, 29. Nov. 2013 (CET)Beantworten
Neee: In der Praxis wird das Zweierkomplement heftigst für alle Zahlenformate verwendet, also bei ganzen Zahlen, Festkomma- und Gleitkommazahlen. Dass die ganzen Zahlen einen so breiten Raum im Artikel einnehmen, hat nichts damit zu tun, wie häufig sie (relativ gesehen) vorkommen, sondern damit, dass man das Prinzip mit ihnen halt viel einfacher erklären kann als beispielsweise mit dem zusätzlichen Overhead bei Gleitkommazahlen. --PeterFrankfurt (Diskussion) 03:49, 30. Nov. 2013 (CET)Beantworten
OK, die Verwendung für Gleitkommazahlen war mir bisher nicht bekannt. Könntest Du Beispiele dafür in den Artikel einbauen? -- UKoch (Diskussion) 22:28, 30. Nov. 2013 (CET)Beantworten
Oha, wie gesagt, da wird es schnell kompliziert, das schüttelt man nicht so aus dem Ärmel. Ein Anfang könnte ein Link auf eine konkrete Darstellung solcher Rechnungen sein, siehe Gleitkommazahl#Beispiel: Berechnung Gleitkommazahl ff. PeterFrankfurt (Diskussion) 00:21, 1. Dez. 2013 (CET)Beantworten
Im von Dir verlinkten Beispiel geht es um IEEE 754, und diese Norm benutzt keine Zweierkomplement-Darstellung. -- UKoch (Diskussion) 19:20, 1. Dez. 2013 (CET)Beantworten

Zweierkomplement/Zweierkomplementdarstellung[Quelltext bearbeiten]

Ich bin der Meinung, dass der o.g. Artikel hauptsächlich die 2er-Komplement-Darstellung beschreibt. Den feinen Unterschied sehe ich - im Gegensatz zu meinem Vorredner - hier: Das 2er-Komplement ist eine Operation/ein Algorithmus, mit der ein Bitmuster in ein anderes umgewandelt wird. Zu welchem Zweck das geschieht oder was das 2er-Komplement eines Bitmusters aussagt, ist grundsätzlich nicht bestimmt. Im Gegensatz dazu steht die 2er-Komplement-Darstellung. Sie beschreibt die "Vereinbarung", dass eine positive Zahl durch ihre Dualdarstellung repräsentiert wird, wobei Sie mit 0 beginnen muss und eine negative Zahl mit einer 1 beginnt (wie die 0 bei positiven Zahlen durch den Wertebereich also die Anzahl der Bit festgelegt) und ihr Betrag das 2er-Komplement ihrer Dualdarstellung ist.

Diese Trennung - wie sie im übrigen auch an diversen Universitäten gelehrt wird (vgl. z.B. http://www.mobile.ifi.uni-muenchen.de/studium_lehre/verg_semester/ss11/rechnerarchitektur/linnhoff_ra_2010.pdf, Seite 104/105) sollte mMn im Artikel herausgestellt werden. (nicht signierter Beitrag von 188.174.0.116 (Diskussion) 11:38, 6. Okt. 2011 (CEST)) Beantworten

Also mir ist das zu haarspalterisch. Interessant werden könnte es höchstens, wenn es überhaupt Fälle gäbe, wo diese Operation für etwas anderes als die numerische Negierung verwendet wird. Kannst Du da was anführen? --PeterFrankfurt 02:14, 7. Okt. 2011 (CEST)Beantworten

Nochmal Vorzeichen[Quelltext bearbeiten]

Durch den jüngsten Revert bin ich drauf gestoßen worden, dass hier ein bisschen verdrückt mit dem MSB umgegangen wird: Einerseits soll es angeblich kein Vorzeichenbit sein, andererseits wird aber bestätigt, dass es bei negativen Zahlen immer eindeutig gesetzt ist. Bei der Umrechnung (und allen weiteren arithmetischen Operationen) wird es also nicht in einem eigenen Rechenschritt ermittelt, aber bei der Abfrage kann man es sehr wohl direkt als Indikator benutzen, beim 6502-Assembler halt schön schnell über das N-Flag, das dessen Zustand immer widerspiegelt. Also ist es in dieser Hinsicht dann doch wieder das Vorzeichenbit. Schon ein bisschen verwirrend, nicht? --PeterFrankfurt (Diskussion) 02:05, 17. Mär. 2012 (CET)Beantworten


Sehe ich genauso. Nehmen wir das folgende Beispiel von der Seite.

Zitat Anfang

Beispiel: Die Addition der beiden positiven Zahlen 50 und 80 ergibt 130 und überschreitet damit den Wertebereich. Die Zahl passt zwar noch in eine 8-Bit-Variable, aber das 8. Bit ist jetzt gesetzt, so dass die Zahl fälschlicherweise negativ erscheint. Manche Mikroprozessoren wie der 6502 melden ein solches Ereignis mit einem eigenen Statusbit, hier dem Overflow-Bit O, das der Programmierer nach vorzeichenbehafteten Rechenoperationen abfragt und entsprechend reagieren kann.
Beispiel für Vorzeichenerweiterung, die 9. Stelle der Vorzeichenerweiterung ist zur Verdeutlichung in Klammern geschrieben:
+4 + 127 = +131 führt zu −4 − 127 = −131 führt zu
(0)00000100 (1)11111100
+ (0)01111111 + (1)10000001
----------- -----------
Ü (0)11111000 Ü (1)00000000
----------- -----------
= (0)10000011 = (1)01111101
In beiden Fällen unterscheiden sich die 8. und 9. Stelle voneinander, eine Reduktion auf 8 Bit würde zu einem Fehler führen. Zur Verdeutlichung und Vergleich die obigen beiden Beispiele mit Vorzeichenerweiterung:

Zitat Ende

Ist da das MSB (also Bit 7 bei Zählung 76543210) hier Vorzeichenbit? Oder nicht? Wäre es Vorzeichenbit, wäre das Ergebnis der linken Rechnung nicht 131 sondern -125.

Es scheint hier implizit das Carryflag des Prozessors als 9. Bit bzw. "Stelle 8" des Akkus angenommen zu werden.

--Bosaudf (Diskussion) 00:29, 20. Jun. 2012 (CEST)Beantworten

p-adisch in Kapitel Verallgemeinerung auf andere Stellenwertsysteme[Quelltext bearbeiten]

Hallo, ich verstehe hier nicht ganz, was das Zweierkomplement mit Primzahlen (p-adisch, p ~ Primzahl) zu tun hat. Bist du sicher, dass du hier nicht "b-adische natürliche Zahlen" meinst? Find das Kapitel auch schwer zu verstehen, an sonsten toller Artikel. -- GetM (nicht signierter Beitrag von 94.216.99.90 (Diskussion) 09:59, 6. Apr. 2013 (CEST))Beantworten

Sorry, aber...[Quelltext bearbeiten]

...dieser Artikel ist in dieser Form meiner Meinung nach relativ wenig hilfreich! Ich arbeite im Bildungswesen und behaupte aus meiner Erfahrung, dass jemand, der diesen Artikel liest, den Kerninhalt nicht verteht! Z.B. wird jemand, der das Konzept der Restklassenringe versteht (oder kennt!), auch bereits das Zweierkomplement verstanden haben. Jemand, der das Zweierkomplement nachliest, wird aber eher ein Anfänger sein und spätestens beim Wort "Restklassenring" eine andere Informationsquelle suchen. Meine Empfehlung für diesen Artikel: Völlig umschreiben! Erstmal erklären wie man es bildet (der Teil ist gut gelungen), dann warum man es benutzt (vermisse ich quasi komplett!). Daher gehört der Teil, in dem mit Zweierkomplement-Zahlen gerechnet wird, viel weiter nach oben. Danach könnte der Leser verstehen: "Aha, mit Zweierkomplementzahlen kann ich korrekt rechnen ohne wirklich ein Bit für das Vorzeichen zu verschwenden und nur mit Additionen.". Erst danach würde ich versuchen zu erklären, warum es funktioniert. Das "Warum-es-funktioniert" finde ich in dem Artikel WIRKLICH schwach. Restklassenringe eben.... ;-)

Die Überschrift "Alternativen" sollte in "Alternative Möglichkeiten der Umrechnung" umbenannt werden. Sonst ist es sehr verwirrend.

Wie wäre eine Gegenüberstellung des 2er Komplements mit dem 10er Komplement. Ich denke, da könnte man eher etwas lernen.

Naja, nur meine 2 Cent.... (nicht signierter Beitrag von 84.186.162.158 (Diskussion) 16:01, 12. Okt. 2014 (CEST))Beantworten

Ich bringe mich hier mal ein. IIRC war ich der jenige, der hier vor über 10 Jahren die diskussion nit dem restklassenring losgetreten hat und dann habe ich 10 Jahre nicht mehr reingeschaut. Als ich die tage reingeschaut habe, habe ich den Artikel fast nicht wiedererkannt, von meinen Sätzen ist nichts mehr zu finden, aber allein durc die Diskussion mit dem Restklassenring hat das ganze aus meiner Sicht sehr gewonnen. Allein was Rechenoperationen wie die Multiplikation angeht, wird das jetzt erst wirklich klar.
Eine denkbare Frage ist, ob an noch einen grundsätzlich anderen Zugang zum Zweierkomplement aufbaut, der auf Restklassenringe verzichtet. Bosaudf (Diskussion) --Bosaudf (Diskussion) 22:29, 16. Feb. 2022 (CET)Beantworten

erster Absatz: bitte ändern[Quelltext bearbeiten]

"Da Zahlen in Hexadezimaldarstellung lediglich etwas umgeschriebene Binärzahlen sind, ..." Sorry, aber das ist so schwach im Ausdruck, das muss doch nicht stehen bleiben?! --195.37.210.65 15:41, 21. Okt. 2014 (CEST)Beantworten

Carry Bit zeigt negative Zahl / MSB zeigt negative Zahl ?! was stimmt[Quelltext bearbeiten]

Im Artikel wird erwähnt, dass das Carry-Bit eine negative Zahl anzeigt, an anderer stelle wird davon gesprochen dass das MSB negative Zahlen anzeigt, was stimmt nun?

Beispiel an 4-Bit Zahlen:

    MSB
     |
  C 4 3 2 1
  0 0 0 0 1
- 0 0 0 1 0 
= 1 1 1 1 1 = -1

Das Carry-Bit soll laut Artikel hier anzeigen, dass wir hier eine negative Zahl haben, aber soweit ich das vorher verstanden habe, ist dafür das MSB zuständig. Wenn ich eine postive Zahl konvertiere wird das Carry-Bit ja auch nicht mit konvertiert:

+ C 4 3 2 1
  0 0 0 0 1 = 1
- C 4 3 2 1
  0 1 1 1 1 = -1 

Oder Konvertierung von Null:

+ C 4 3 2 1
  0 0 0 0 0
~ C 4 3 2 1
  1 0 0 0 0

Das Carry-Bit ist gesetzt, aber null gehört per Defintion zu den positiven Zahlen, von daher kann das Carry-Bit keine negative Zahl anzeigen. Es beweist zuminest, das es nicht als Indikator für einen Werte-Überlauf gezählt werden kann, weil hier keiner stattgefunden hat

Was stimmt nun? --85.16.71.3 18:19, 25. Okt. 2014 (CEST)Beantworten

Lese es jetzt erst.
MSB. Das Most Significant Bit.
Ein Carry Bit steht nur im Prozessor. In der Zahl zeigt das MSB das Vorzeichen an. 1 heißt negativ, 0 heißt nichtnegativ.Bosaudf (Diskussion) --Bosaudf (Diskussion) 22:31, 16. Feb. 2022 (CET)Beantworten

Formulierung[Quelltext bearbeiten]

Hi zusammen,

will nicht kleinlich sein, aber der Artikel ist stellenweise wirklich schlech formuliert (meine persönliche bescheidene Meinung). Umständlich formuliert würde ich sagen. Darüber hinaus:

Der 2. Absatz, - der mit "Üblicherweise werden Zahlen im Computer ..." beginnt, wiedrholt lediglich was im vorherigen, 1. Absatz bereits dargestellt wurde.

Diese Formulierung finde ich wirklich 'lustig':

... daher ist es wichtig, zu wissen, welches Bit wofür verwendet wird.

Mhm ... Is es das sonst nicht ? Also zu wissen welches Bit wofür steht ?

Und auch betreffend der Formulierung:

'Üblicherweise wird das erreicht, indem sämtliche Zahlen eine konstante Stellenzahl haben und bei Bedarf mit führenden Nullen aufgefüllt werden ...'

muss ich darauf hinweisen das dies ebenfalls der Regelfall ist, daher die ganze Sache mit den Datentypen.

OK, nichts desto trotz

LG Wikipedia ist super ! Ein Leser

Zur Formulierung[Quelltext bearbeiten]

Die Frage ist, wie man einerseits vernuenftig formuliert - andererseits aber auch den Leser nicht hilflos stehen laesst. Das geht schon in der Motivation los.

Die Frage ist doch, wofuer ich Komplementdarstellungen ueberhaupt brauche. Und die Antwort ist eine technisch sehr simple: Es ist recht leicht, ein mechanisches Addierwerk zu bauen, dagegen ist es eine ziemliche Kugelfuhr, ein mechanisches Subtrahierwerk zu bauen.

Komplementdarstellungen, das ist beim Zweierkomplement so, das ist beim Zehnerkomplement nicht anders, schaffen hier Abhilfe, da ich mit Komplementdarstellungen auf die Subtraktion verzichten kann: Statt einen Subtrahenden vom Minuenden abzuziehen, addiere ich einfach das additive Inverse.

Beim Wort "additive Inverse" steigt mir Tante Frieda aus.

Jetzt kann ich eigentlich nur fragen, ob ich eine Einleitung so formuliere, dass Tante Frieda ihr Halbwissen kriegt und sagt, das reiche ihr, genauer will sie das gar nicht wissen, und fuer die Nerds gehe ich dann ins Eingemachte - oder ob man das ganze so formuliert kriegt, dass auch Tante Frieda die ganzen Details versteht.

Wikipedia richtet sich nicht nur an Mathematiker oder dergl., es ist eine Enzuklopaedie - und die muss auch fuer Tante Frieda gewinnbringend lesbar sein.

Bosaudf (Diskussion) 18:16, 16. Mär. 2018 (CET)Beantworten

Ich ueberlege, ob ich mal eine neue Motivation vorschlage, die sich an Handzählern orientiert, generell kann man an Zaehlwerken und einem begrenzten Zahlbereich gut darstellen, dass eine Subtraktion durch eine geeignete Addition ersetzt werden kann.

Bosaudf (Diskussion) 12:56, 17. Mär. 2018 (CET)Beantworten

Vorschlag für eine neue Einleitung[Quelltext bearbeiten]

Das Zweierkomplement (ebenso das Einerkomplement) ist ein _additiv_Inverses_ einer Ganzzahl in einem binären Rechenwerk. Zweck ist die Subtraktion von Ganzzahlen in einem _Addierwerk_ durchzuführen und auf ein Subtrahierwerk zu verzichten.
// Kontext ist _nicht_ Theorie, sondern maschnienelle (elektronische), binäre! Rechenwerke
// siehe auch: https://de.wikipedia.org/wiki/Addierwerk#Subtrahieren

Die Idee ist Subtraktionen wie 7-5 und 4-(-3) durch die Additionen 7+(-5) und 4+3 zu ersetzen.

Weitere Bezeichnungen sind 2-Komplement, Binärkomplement, two's complement.
// "b-Komplement mit Basis b" und Basiskomplement gehören nach Verallgemeinerung, b=10 etc.

Zweierkomplement und Einerkomplement sind auch als binäre Darstellungen negativer Ganzzahlen zu verstehen.

Das Einerkomplement einer Ganzzahl ist das logische Komplement (Umkehrung aller Bits) der Ganzzahl im _konkreten_ Rechenwerk.
// Die Gesamtheit (die Anzahl) binärer Stellen (Bits) ist durch das Rechenwerk konkret gegeben !
// logisches Komplement: https://de.wikipedia.org/wiki/Komplement_(Verbandstheorie)
// als Operation eines Rechenwerks: https://de.wikipedia.org/wiki/Arithmetisch-logische_Einheit#Funktionen
// --> Logisch --> Negation

Das Zweierkomplement ist das um Eins erhöhte Einerkomplement.

// --- Ende der Einleitung ! ---
Hier ist ein Rahmen mit Kontext, Verständnis und (primitiver) Definition abgesteckt.
Alles weitere kann weiter unten ausführlich auseinander genommen werden.

Die gegenwärtige Einleitung strotzt vor Unsinn. (Tut mir leid, aber es ist so.)
> keine zusätzlichen Zeichen + und -

> das Zweierkomplement erlaubt es, die Rechenart Subtraktion auf die Addition zurückzuführen
> und im Rahmen eines Addierwerks durchzuführen
NEIN - das additiv Inverse erlaubt es Subtraktion durch Addition zu ersetzen, Einerkomplement und Zweierkomplement sind geeignete konkrete Implementierungen zu diesem Zweck

> Das Zweierkomplement setzt ein beschränktes, vordefiniertes Format (Bit-Länge) für die Darstellung von Binärzahlen voraus,
> da die Vereinbarung eine feste Bedeutung für das höchstwertige Datenbit verlangt.
NEIN - KEINE Theorie, KONKRETE Rechenwerke

> eine Interpretationsweise formatierter binärer Bitfolgen
> welche für negative Werte von Integer-Variablen auftritt
> für die ein in positiv und negativ geteilter Wertebereich definiert ist
Wertebereiche sind für Typen definiert, unabhängig von Konstanten und Variablen.
Ob Zweier- oder Einerkomplement, oder was anderes, ist MASCHIENEN-abhängig, nicht vom Typ einer Sprache.
In vielen Sprachen orientiert sich der Wertebereich von Ganzzahltypen am Zweierkomplement, das Compilat muss aber auf der konkreten Zielplattform laufen !

> Dies sind die sogenannten "signed integer"
> im Gegensatz zu den "unsigned integer" in Programmiersprachen
> Für letztere tritt ein Zweierkomplement nicht auf
7u ist in C ein Literal für den Wert 7 im Typ unsigned int.
7u-5u ist eine Subtraktion, wie auswerten auf einer Maschiene ohne Subtrahierwerk ?

Ich habe keine Erfahrung mit umfangreichen Änderungen an Artikeln, ausserdem braucht es mindestens eine zweite Meinung. Ich stelle es als Anregung hier rein. --94.114.46.166 03:08, 18. Dez. 2020 (CET) (Edit: kleine Korrekturen --109.91.245.101 18:23, 18. Dez. 2020 (CET))Beantworten