Frage

Eine andere Frage gefragt, über die Bestimmung, odd/Ebenheit in C, und die idiomatischen (x & 1) Ansatz war richtig markiert als defekt für einer-Komplement-basierte Systeme, die die C-standard erlaubt.

Tun-Systeme gibt es eigentlich in der "realen Welt" außerhalb von computer-Museen?Ich habe die Codierung seit den 1970er Jahren und ich bin mir ziemlich sicher, dass ich nie getroffen habe wie ein Tier.

Ist jemand tatsächlich die Entwicklung oder das testen von code für ein solches system?Und wenn nicht, sollten wir uns sorgen machen über solche Dinge, oder sollten wir Sie in Raum 101 zusammen mit Lochstreifen und Lochkarten...?

War es hilfreich?

Lösung

Das kommt alles Ihre Wurzeln zu kennen.
Ja, das ist technisch eine alte Technik, und ich würde wahrscheinlich tun, was andere Menschen in dieser Frage vorgeschlagen und verwenden Sie den Modulo-Operator (%) gerade oder ungerade zu bestimmen. Aber zu verstehen, was ein 1s-Komplement (oder 2s Ergänzung) ist immer eine gute Sache zu wissen. Unabhängig davon, ob Sie jemals verwenden, Ihre CPU beschäftigt sich mit den Dingen, die ganze Zeit. So kann es nie um das Konzept zu verstehen verletzt. Nun, moderne Systeme machen es so Sie in der Regel nie über Dinge wie das kümmern, so ist es ein Thema für die Programmierung 101 Kurse in einer Art und Weise worden ist. Aber Sie müssen bedenken, dass manche Menschen tatsächlich noch diesen in der „realen Welt“ ... zum Beispiel verwenden würden, entgegen der landläufigen Meinung gibt es Menschen, die noch Assembly verwenden! Nicht viele, aber bis CPUs verstehen kann roh C # und Java, jemand wird noch dieses Zeug zu verstehen hat.

Und was solls, man kann nie wissen, wenn Sie sich selbst etwas zu tun, finden könnte, wo Sie brauchen eigentlich binäre Mathematik und dass 1s Ergänzung ausführen könnte sich als nützlich.

Andere Tipps

ich in der Telemetrie Bereich arbeiten, und wir haben einige unserer Kunden haben alte Analog-Digital-Wandler, der noch 1-Komplement verwenden. Ich habe gerade Code den anderen Tag zu schreiben, von 1-Komplement zu 2-Komplement zu konvertieren, um zu kompensieren.

Also ja, es ist immer noch da draußen (aber sie sind nicht sehr oft in sie eindringen laufen).

RFC 791 S.14 definiert das IP-Header-Prüfsumme als:

  

Die Prüfsumme Feld ist die 16-Bit-ein-Ergänzung der eigenen ergänzen Summe einer von allen 16-Bit-Wörter in der Kopfzeile. Für die Zwecke der Berechnung der Prüfsumme, ist der Wert der Prüfsumme Feld Null.

So Einerkomplement ist noch stark in der realen Welt verwendet wird, in jedem einzelnen IP-Paket, das gesendet wird. :)

Die CDC Cyber-18 verwendete ich zurück in den '80 war ein 1s Ergänzung Maschine, aber das ist fast 30 Jahre her, und ich habe nicht einen gesehen, da (das war allerdings auch das Letzte mal, ich arbeitete auf einem nicht-PC)

Ich habe noch nie begegnet Komplement-System ein, und ich habe so lange worden Codierung wie Sie haben.

Aber ich habe ein 9-Komplement-System auftreten - die Maschinensprache eines HP-41c Rechners. Ich gebe zu, dass dies als veraltet angesehen werden, und ich glaube nicht, dass sie jemals einen C-Compiler für diejenigen hatten.

Wir haben unser letzten 1960 aus Honeybox irgendwann im letzten Jahr, die auf ihn unsere älteste Maschine gemacht Seite? ˅. Es war Zweier-Komplement. Dies ist nicht zu sagen, zu wissen oder sich dessen bewusst zu Einerkomplement ist eine schlechte Sache. Just, werden Sie wahrscheinlich nie heute in Einerkomplement Probleme laufen, egal wie viel Computer Archäologie sie haben Sie bei der Arbeit zu tun.

Die Probleme sind Sie eher in auf der ganzen Zahl Seite laufen sind Endian Fragen (I ‚m looking at you PDP ). Auch Sie werden in mehr „realen Welt“ laufen (dh heute) Probleme mit floating Punkt Formate als Sie Formate integer wird.

Komisch, bat die Leute, die gleiche Frage auf comp.std.c 1993 und niemand zu einer Ergänzung Maschine einer Punkt könnte die wieder verwendet worden war, dann .

Also ja, ich denke, wir zuversichtlich, daß man sagen kann, Komplement zu einer dunklen Ecke unserer Geschichte gehört, praktisch tot und ist kein Problem mehr.

Ich beschloss, einen zu finden. Die Unisys ClearPath Systeme haben einen ANSI C-Compiler (ja, sie nennen es "American National Standard C", für die auch die PDF-Dokumentation wurde zuletzt im Jahr 2013 aktualisiert Die Dokumentation ist Online-;

Dort werden die signierten Typen sind alle mit einer Komplement Darstellung, mit den folgenden Eigenschaften:

Type                 | Bits | Range
---------------------+------+-----------------
signed char          |   9  |  -2⁸+1 ...  2⁸-1
signed short         |  18  | -2¹⁷+1 ... 2¹⁷-1
signed int           |  36  | -2³⁵+1 ... 2³⁵-1
signed long int      |  36  | -2³⁵+1 ... 2³⁵-1
signed long long int |  72  | -2⁷¹+1 ... 2⁷¹-1

Bemerkenswert ist, es auch standardmäßig unterstützt nicht-konforme unsigned int und unsigned long, die von 0 ... 2³⁶ - 2 reichen, kann aber geändert werden mit einem Pragma 0 ... 2³⁶ - 1.

  

Ist Einerkomplement eine reale Problem, oder einfach nur einen historischen?

Ja, es immer noch benutzt. Sein auch in der modernen Intel-Prozessoren verwendet. Von Intel® 64 und IA- 32 Architektur Software Developer Benutzerhandbuch 2A, Seite 3-8:

  

3.1.1.8 Beschreibung Section

     

Jeder Befehl wird dann durch die Anzahl der Informationsabschnitte beschrieben. Der Abschnitt „Beschreibung“ beschreibt den Zweck der Anweisungen und erforderlicher Operanden im Detail.

     

Zusammenfassung von Begriffen, die in dem Beschreibungsabschnitt verwendet werden können:
  * Legacy-SSE:. Bezieht sich auf SSE, SSE2, SSE3, SSSE3, SSE4, AESNI, PCLMULQDQ und zukünftige Befehlssätze XMM Register Referenzierung und ohne VEX-Präfix codiert
  * VEX.vvvv. Die VEX Bitfeld spezifiziert ein Quell- oder Zielregister (in 1-Komplement-Form).
  * Rm_field: Abkürzung für den ModR / M r / m-Feld und jeder REX.B
  * Reg_field: Abkürzung für die ModR / M reg Feld und jede REX.R

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