Frage Wenn 32-Bit-Computer nur Zahlen von bis zu 2 ^ 32 verarbeiten können, warum kann ich 1000000000000 (Billion) schreiben, ohne dass mein Computer abstürzt?


32-Bit-Computer können nur signierte Ganzzahlen bis zu 2 speichern31 - 1.
Aus diesem Grund haben wir keine IPv4-Adressen mehr und sind in die 64-Bit-Ära eingetreten.

Aber die Nummer 231 - 1 (2.147.483.647) ist nicht so groß wie die Zahl von 1 Billion (1.000.000.000.000), die ich gut auszustellen vermag, ohne dass meine Maschine zusammenbricht.

Kann jemand erklären, warum das so ist?


365


Ursprung


Die Frage ist fehlerhaft. 32-Bit-Computer können mit Zahlen umgehen, die viel größer als 2 ^ 32 sind. Sie machen es die ganze Zeit, mit 'lang' und so weiter. Sie können nur bis zu 2 ^ 32 in einem Register speichern, aber die Software wird geschrieben, um dieses Problem zu umgehen. Einige moderne Sprachen haben nicht einmal ein Problem mit der Länge einer gegebenen Zahl. - JFA
Bitte halten Sie Kommentare zum Thema, höflich und relevant für die technischen Aspekte der Frage. Fast 50 Scherzkommentare mussten bereits entfernt werden, und wir möchten vermeiden, die Post sperren zu müssen. Vielen Dank. - nhinkle♦
Diese Frage wurde etwas schlampig geschrieben. Was meinst du mit "schreiben" und "anzeigen" die Nummer 1000000000000? Als Sie die Frage schrieben, schrieben Sie die Zahl 1000000000000, und Ihr Webbrowser zeigt es ganz gut an, nehme ich an, aber das sollte für niemanden merkwürdig sein, der jemals einen Computer vorher benutzt hat. Die Frage verlangt nach freier Interpretation. - HelloGoodbye
Das menschliche Bewusstsein wird geschätzt, um ungefähr 50 Bits zu halten (ich las irgendwo). Die Frage ist also nicht "Wie kann ich schreiben? 10^9 ohne dass mein PC abstürzt? "sondern" Wie kann ich schreiben? 10^(18) ohne dass mein Gehirn zusammenbricht? " - Hagen von Eitzen
32-Bit-Computer können UNSIGNED-Ganzzahlen nur bis zu 2 ^ 32 - 1 speichern. 2 ^ 32 - 1 entspricht nicht einmal 2.147.483.647 ... 300 Up-Stimmen und niemand hat das erkannt? - Koray Tugay


Antworten:


Ich beantworte Ihre Frage, indem ich Sie nach einer anderen frage:

Wie zählst du auf deine Finger bis 6?

Sie zählen wahrscheinlich mit einer Hand zur größtmöglichen Anzahl und gehen dann zu Ihrer zweiten Hand über, wenn Ihnen die Finger ausgehen. Computer machen dasselbe, wenn sie einen Wert darstellen müssen, der größer ist, als ein einzelnes Register halten kann, werden sie mehrere 32-Bit-Blöcke verwenden, um mit den Daten zu arbeiten.


785



Lustig, @codename. Wie also zählen Sie auf Ihre Finger zu 32 oder mehr (d. H. Sobald 2 ^ 5 erschöpft ist)? ;) Die Analogie, sich in die andere Hand zu bewegen, ist gut ... auch wenn binär die Notwendigkeit verzögert, sich in die andere Hand zu bewegen. Was ich gerne sehen würde zählt auf 1.024 oder mehr mit der pedialen Geschicklichkeit, sich auf die Zehen zu bewegen, um weiter in Binärzahlen zu zählen - bis zu 1.048.575! :) Das ist potenziell 20-Bit-Daughterboard-Power. : P - J0e3gan
Bitte halten Sie Kommentare zum Thema und relevant für die Diskussion der technischen Aspekte dieser Antwort. Über 60 Scherzkommentare wurden bereits aus dieser Antwort gelöscht, und wir möchten vermeiden, den Post sperren zu müssen. - nhinkle♦
@ Codename - einfach, weisen Sie einen Finger als Stapelzeiger zu. Sobald Ihnen die Finger ausgehen, fügen Sie den Betrag dem Stapel hinzu und starten das Zählen erneut. - Makach
Wo hast du das gelernt, @codename? Ich habe das zuerst von Frederik Pohl gehört, siehe z.B. Hier hjkeen.net/halqn/f_pohl3.htm - Zane
Ich denke, das ist nicht die Antwort auf die relevante Frage. Antwort von @ Bigbio2002 ist der richtige. Hier ist "1000000000000" keine Zahl, sondern ein Text, genau wie "adsfjhekgnoregrebgoregnkevnregj". Was Sie sagen, ist wahr, aber ich fühle stark, dass dies nicht die richtige Antwort ist. Und so viele Upvotes zu sehen ... - Master Chief


Sie haben Recht, dass eine 32-Bit-Ganzzahl keinen Wert größer als 2 ^ 32-1 enthalten kann. Der Wert dieser 32-Bit-Ganzzahl und wie es auf Ihrem Bildschirm angezeigt wird, sind jedoch zwei völlig verschiedene Dinge. Die gedruckte Zeichenfolge "1000000000000" wird nicht durch eine 32-Bit-Ganzzahl im Speicher dargestellt.

Um die Zahl "1000000000000" wörtlich anzuzeigen, sind 13 Byte Speicher erforderlich. Jedes einzelne Byte kann einen Wert von bis zu 255 enthalten. Keiner von ihnen kann den gesamten numerischen Wert enthalten, sondern einzeln als ASCII-Zeichen interpretiert werden (z. B. das Zeichen '0'wird durch den Dezimalwert 48, Binärwert, dargestellt 00110000), können sie zu einem Format zusammengefügt werden, das für Sie, einen Menschen, sinnvoll ist.


Ein verwandtes Konzept in der Programmierung ist Typumwandlung, so interpretiert ein Computer einen bestimmten Strom von 0s und 1s. Wie im obigen Beispiel kann es als ein numerischer Wert, ein Zeichen oder sogar etwas ganz anderes interpretiert werden. Während eine 32-Bit-Ganzzahl möglicherweise nicht in der Lage ist, einen Wert von 1000000000000 zu speichern, kann eine 32-Bit-Gleitkommazahl eine völlig andere Interpretation verwenden.

Wie Computer intern mit großen Zahlen arbeiten und diese verarbeiten können, gibt es 64-Bit-Ganzzahlen (die Werte von bis zu 16 Milliarden Milliarden aufnehmen können), Gleitkommawerte sowie spezialisierte Bibliotheken, die mit beliebig großen Datenmengen arbeiten können Zahlen.


397



Eigentlich stimmt das meistens aber nicht ganz. Eine Gleitkommazahl mit 32 Punkten ist wahrscheinlich nicht in der Lage, 1000000000000 genau darzustellen. Sie wird eine Zahl darstellen, die der gewünschten Zahl sehr nahe kommt, aber nicht genau. - Tim B
@TimB: Hast du vom Format decimal32 gehört? Es ist Teil des IEEE 754-2008 Standards. Dieses Format ist in der Lage, diese Zahl korrekt darzustellen :) - V-X
Stimmt, das kann. Dies ist jedoch nicht das Format, das die Leute meinen, wenn sie "float" sagen, was sich normalerweise auf eine 32-Bit-Fließkommazahl bezieht, wie sie von Standard-Gleitkommaprozessoren in aktuellen Computern gespeichert und verwendet wird. - Tim B
@TimB tatsächlich. Die nächste Nummer, die als float32 dargestellt werden kann, ist 999999995904 - greggo
@TimB: Aber eine 64-Bit Gleitkommazahl kann leicht darstellen 1000000000000 genau. Es ist 10 ^ 12 oder 2 ^ 12 * 5 ^ 12; 5 ^ 12 benötigt 28 Bit Mantisse. - Keith Thompson


In erster Linie können 32-Bit-Computer Nummern bis 2³²-1 speichern in einem einzigen Maschinenwort. Maschinenwort ist die Menge an Daten, die die CPU auf natürliche Weise verarbeiten kann (dh Operationen an Daten dieser Größe werden in Hardware implementiert und sind im Allgemeinen am schnellsten durchzuführen). 32-Bit-CPUs verwenden Wörter, die aus 32 Bits bestehen, und können daher Zahlen von 0 bis 2³²-1 speichern in einem Wort.

Zweite, 1 Billion und 1000000000000 sind zwei verschiedene Dinge.

  • 1 Billion ist ein abstrakter Begriff der Zahl
  • 1000000000000 ist Text

Durch Drücken 1 einmal und dann 0 12 mal schreibst du Text. 1 Eingaben 1, 0 Eingaben 0. Sehen? Du tippst Charaktere ein. Zeichen sind keine Zahlen. Schreibmaschinen hatten überhaupt keine CPU oder Speicher und sie handhabten solche "Zahlen" ziemlich gut, weil es nur Text ist.

Beweise es 1000000000000 ist keine Nummer, sondern Text: es kann 1 Billion (dezimal), 4096 (binär) oder 281474976710656 (hexadezimal) bedeuten. Es hat noch mehr Bedeutung in verschiedenen Systemen. Bedeutung von 1000000000000 ist eine Nummer und speichern ist eine andere Geschichte (wir werden gleich darauf zurückkommen).

Um den Text zu speichern (in der Programmierung heißt er Zeichenfolge) 1000000000000 Sie benötigen 14 Byte (eins für jedes Zeichen plus ein abschließendes NULL-Byte, das im Grunde bedeutet "die Zeichenfolge endet hier"). Das sind 4 Maschinenwörter. 3 und die Hälfte wäre genug, aber wie gesagt, Operationen an Maschinenwörtern sind am schnellsten. Angenommen ASCII wird für die Textspeicherung verwendet, also im Speicher sieht es so aus: (Umwandlung von ASCII - Codes entsprechend 0 und 1 binär, jedes Wort in einer separaten Zeile)

00110001 00110000 00110000 00110000
00110000 00110000 00110000 00110000
00110000 00110000 00110000 00110000
00110000 00000000 00000000 00000000

Vier Zeichen passen in ein Wort, der Rest wird zum nächsten verschoben. Der Rest wird zum nächsten Wort bewegt, bis alles (einschließlich des ersten NULL-Bytes) passt.

Nun zurück zum Speichern von Zahlen. Es funktioniert genau wie mit überfließendem Text, aber sie sind von rechts nach links angepasst. Es klingt vielleicht kompliziert, also hier ein Beispiel. Der Einfachheit halber nehmen wir an, dass:

  • unser imaginärer Computer benutzt Dezimal anstelle von Binär
  • Ein Byte kann Zahlen enthalten 0..9
  • Ein Wort besteht aus zwei Bytes

Hier ist ein leerer 2-Wort-Speicher:

0 0
0 0

Lassen Sie uns die Nummer 4 speichern:

0 4
0 0

Jetzt fügen wir 9 hinzu:

1 3
0 0

Beachten Sie, dass beide Operanden in ein Byte passen, aber nicht das Ergebnis. Aber wir haben noch einen gebrauchsfertigen. Jetzt speichern wir 99:

9 9
0 0

Auch hier haben wir ein zweites Byte verwendet, um die Nummer zu speichern. Fügen wir 1 hinzu:

0 0
0 0

Hoppla ... Das heißt ... Integerüberlauf und ist manchmal eine Ursache für viele ernste Probleme sehr teuer.

Aber wenn wir einen Überlauf erwarten, können wir folgendes tun:

0 0
9 9

Und jetzt füge 1 hinzu:

0 1
0 0

Es wird klarer, wenn Sie bytetrennende Leerzeichen und Zeilenumbrüche entfernen:

0099    | +1
0100

Wir haben vorhergesagt, dass ein Überlauf passieren könnte und wir möglicherweise zusätzlichen Speicher benötigen. Zahlen auf diese Weise zu behandeln ist nicht so schnell wie mit Zahlen, die in einzelne Wörter passen und es muss in Software implementiert werden. Das Hinzufügen von Unterstützung für Zwei-32-Bit-Wort-Nummern zu einer 32-Bit-CPU macht es effektiv zu einer 64-Bit-CPU (jetzt kann es nativ an 64-Bit-Zahlen arbeiten, oder?).

Alles, was ich oben beschrieben habe, gilt auch für Binärspeicher mit 8-Bit-Bytes und 4-Byte-Wörtern, es funktioniert genauso:

00000000 00000000 00000000 00000000 11111111 11111111 11111111 11111111    | +1
00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000000

Solche Zahlen in ein Dezimalsystem zu konvertieren, ist jedoch schwierig. (aber es funktioniert sehr gut mit hexadezimal)


189



Ihre Antwort lautet eher herablassend. OP spricht eindeutig über die Nummer, nicht über den Text: large as the number 1 trillion (1000000000000). Außerdem sprichst du fast davon Arbitrary-Genauigkeit Arithmetik, aber du nennst nie wirklich einen der Begriffe für das, was du sagst .... - MirroredFate
"1 Billion" ist auch eine Zeichenfolge - Elzo Valugi
@ElzoValugi Es ist. Ich musste einen Weg finden, das Konzept der abstrakten Zahl zu präsentieren, im Gegensatz zu einer Zeichenfolge, die eine Zahl repräsentiert. Ich glaube, "1 Billion" ist eine bessere und weniger zwiespältige Möglichkeit, dies zu tun (siehe den Beweis in Antwort). - gronostaj
@MirroredFate Ich stimme nicht zu "spricht eindeutig über die Nummer". OP sagt "gut angezeigt", was klar ist ist über den Text '1000000000000' zu mir sprechen ... - Joe
@yannbane 'A' ist ein Zeichen und keine Zahl. "?" ist ein Charakter und keine Zahl. '1' ist ein Zeichen und keine Zahl. Zeichen sind nur Symbole. Sie können Ziffern oder Zahlen darstellen, sind aber definitiv keine Zahlen. '1' kann für eins, zehn, hundert, tausend usw. stehen, es ist nur ein Symbol, das für eine Ziffer steht, die eine Zahl oder deren Teil sein kann. "10" (Zeichenkette) kann zwei oder acht oder zehn oder sechzehn usw. bedeuten, aber wenn Sie sagen, dass Sie zehn Äpfel haben, verwenden Sie eine Zahl zehn und jeder weiß, was Sie meinen. Es gibt einen großen Unterschied zwischen Zeichen und Zahlen. - gronostaj


Sie können auch schreiben "Diese Aussage ist falsch" ohne dass dein Computer abstürzt :) @ Scotts Antwort ist für bestimmte Berechnungsrahmen genau richtig, aber deine Frage, eine große Zahl zu "schreiben", bedeutet, dass es nur einfacher Text ist, zumindest bis es interpretiert wird.

Bearbeiten: jetzt mit weniger Sarkasmus mehr nützliche Informationen auf verschiedenen Wegen a Nummer kann im Speicher gespeichert werden. Ich werde diese mit beschreiben höhere Abstraktion mit anderen Worten, ein moderner Programmierer kann Code einschreiben, bevor er zur Ausführung in Maschinencode übersetzt wird.

Daten auf einem Computer müssen auf einen bestimmten beschränkt sein Artund eine Computerdefinition eines solchen Typs beschreibt, welche Operationen an diesen Daten und wie ausgeführt werden können (d. h. Nummern vergleichen, Text verketten oder XOR einen Booleschen Wert verwenden). Sie können nicht einfach Text zu einer Zahl hinzufügen, genauso wie Sie eine Zahl nicht mit Text multiplizieren können, damit einige dieser Werte zwischen Typen konvertiert werden können.

Lass uns beginnen mit vorzeichenlose Ganzzahlen. In diesen Werttypen werden alle Bits zum Speichern von Informationen über Ziffern verwendet. deins ist ein Beispiel für a 32-Bit-Ganzzahl ohne Vorzeichen wo irgendein Wert von 0 zu 2^32-1 kann aufbewahrt werden. Und ja, je nach Sprache oder Architektur der verwendeten Plattform könnten Sie 16-Bit-Ganzzahlen oder 256-Bit-Ganzzahlen haben.

Was, wenn du negativ werden willst? Intuitiv Ganzzahlen mit Vorzeichen ist der Name des Spiels. Konvention ist es, alle Werte von zuzuteilen -2^(n-1) zu 2^(n-1)-1 - So vermeiden wir die Verwirrung, mit zwei Schreibweisen umgehen zu müssen +0 und -0. Eine 32-Bit-Ganzzahl mit Vorzeichen würde also einen Wert von enthalten -2147483648 zu 2147483647. Ordentlich, nicht wahr?

Ok, wir haben Ganzzahlen behandelt, die Zahlen ohne eine Dezimalkomponente sind. Diese auszudrücken ist kniffliger: Der nicht ganzzahlige Teil kann vernünftigerweise nur irgendwo dazwischen liegen 0 und 1, also würde jedes zusätzliche Bit, das man benutzt, um seine Genauigkeit zu erhöhen: 1/2, 1/4, 1/8 ... Das Problem ist, dass man eine einfache Dezimalzahl nicht präzise ausdrücken kann 0.1 als eine Summe von Brüchen, die im Nenner nur Zweierpotenzen haben können! Wäre es nicht viel einfacher, die Zahl als Integer zu speichern, aber akzeptieren Sie stattdessen den Radix (Dezimal) -Punkt? Das nennt man Fixpunkt Zahlen, wo wir speichern 1234100 aber vereinbaren Sie eine Konvention, um es als zu lesen 1234.100 stattdessen.

Ein relativ gebräuchlicher Typ für Berechnungen ist floating point. Die Art, wie es funktioniert, ist wirklich ordentlich, es verwendet ein Bit, um den Vorzeichenwert zu speichern, dann einige, um den Exponenten und den Signifikanten zu speichern. Es gibt Standards, die solche Zuweisungen definieren, aber für a 32-Bit-Gleitkommazahl die maximale Anzahl, die Sie speichern könnten, ist überwältigend

(2 - 2^-23) * 2^(2^7 - 1) ≈ 3.4 * 10^38

Dies geschieht jedoch auf Kosten der Präzision. JavaScript, das in Browsern verfügbar ist, verwendet 64-Bit-Gleitkommazahlen, und es kann immer noch nicht alles richtig machen. Kopieren Sie dies einfach in die Adressleiste und drücken Sie die Eingabetaste. Spoileralarm: Das Ergebnis ist nicht sein würde 0.3.

javascript:alert(0.1+0.2);

Es gibt mehr alternative Typen wie Microsoft .NET 4.5 BigInteger, die theoretisch keine oberen oder unteren Grenzen hat und in "Chargen" berechnet werden muss; aber vielleicht sind die faszinierendsten Technologien das verstehen Mathe, wie die Wolfram Mathematica Engine, die präzise mit abstrakten Werten arbeiten kann wie Unendlichkeit.


40



Sie können das tun Dies Wirklichkeit. Versuche das im Star Trek-Universum. Stell dich einfach zurück, wegen all der Funken und Rauch. - Michael Petrotta
So funktioniert Fixed-Point nicht. Es ist tatsächlich ein System, bei dem Zahlen skaliert und voreingestellt sind, um den Dezimalpunkt zu erzeugen. In Ihrem Beispiel ist die Skala 1/1000, aber es gibt auch Festkommazahlen (besonders in der Computergrafik): 0 = 0.0, 255 = 1.0 - die Skala ist 1/255. - Andon M. Coleman


Der Schlüssel ist zu verstehen, wie Computer kodieren Zahlen.

Richtig, wenn ein Computer darauf besteht, Zahlen unter Verwendung einer einfachen binären Darstellung der Zahl unter Verwendung eines einzigen Wortes (4 Bytes auf einem 32-Bit-System) zu speichern, dann kann ein 32-Bit-Computer nur Zahlen bis zu 2 ^ 32 speichern. Aber es gibt viele andere Möglichkeiten, Zahlen zu kodieren, je nachdem, was Sie damit erreichen wollen.

Ein Beispiel ist, wie Computer Fließkommazahlen speichern. Computer können viele verschiedene Arten verwenden, um sie zu verschlüsseln. Der Standard IEEE 754 definiert Regeln für die Kodierung von Zahlen größer als 2 ^ 32. Grob gesagt können Computer dies implementieren, indem sie die 32 Bits in verschiedene Teile aufteilen, die einige Ziffern der Zahl und andere Bits darstellen, die die Zahl repräsentieren Größe der Zahl (d. h. der Exponent 10 ^ x). Dies ermöglicht ein viel größeres Angebot Zahlen in der Größe, aber Kompromisse die Präzision (die für viele Zwecke in Ordnung ist). Natürlich kann der Computer auch mehr als ein Wort für diese Codierung verwenden, wodurch die Genauigkeit der Größe der verfügbaren codierten Zahlen erhöht wird. Die einfache dezimale 32-Version des IEEE-Standards ermöglicht Zahlen mit etwa 7 Dezimalstellen der Genauigkeit und Zahlen von bis zu etwa 10 ^ 96 in der Größenordnung.

Aber es gibt viele andere Möglichkeiten, wenn Sie die zusätzliche Präzision benötigen. Offensichtlich können Sie mehr Wörter in Ihrer Codierung ohne Begrenzung verwenden (obwohl mit einer Leistungseinbuße in und aus dem codierten Format konvertiert werden). Wenn Sie eine Möglichkeit erkunden möchten, wie dies gemacht werden kann, gibt es ein großartiges Open-Source-Add-In für Excel, das ein Kodierungsschema verwendet, das Hunderte von Stellen für die Genauigkeit bei der Berechnung zulässt. Das Add-In heißt Xnumbers und ist verfügbar Hier. Der Code ist in Visual Basic, der nicht so schnell wie möglich ist, aber den Vorteil hat, dass er leicht zu verstehen und zu ändern ist. Es ist eine großartige Möglichkeit zu lernen, wie Computer die Kodierung längerer Zahlen erreichen. Und Sie können mit den Ergebnissen in Excel experimentieren, ohne Programmierwerkzeuge installieren zu müssen.


31





Es ist alles in deiner Frage.

Sie können schreiben eine beliebige Zahl auf Papier. Versuche, eine Billion Punkte auf ein weißes Blatt Papier zu schreiben. Es ist langsam und ineffektiv. Deshalb haben wir ein 10-stelliges System, um diese großen Zahlen darzustellen. Wir haben sogar Namen für große Zahlen wie "Millionen", "Billionen" und mehr, also sagst du nicht one one one one one one one one one one one... laut aus.

32-Bit-Prozessoren sind so konzipiert, dass sie am schnellsten und effizientesten mit Speicherblöcken arbeiten, die genau 32 Binärstellen lang sind. Aber wir, die Leute, benutzen normalerweise ein 10-stelliges numerisches System und Computer, die elektronisch sind, verwenden ein 2-stelliges System (binär). Die Zahlen 32 und 64 sind zufällig Potenzen von 2. Also sind eine Million und eine Billion Potenzen von 10. Es ist einfacher für uns, mit diesen Zahlen zu arbeiten, als zum Beispiel mit 65536.

Wir brechen große Zahlen in Ziffern, wenn wir sie auf Papier schreiben. Computer zerlegen Zahlen in eine größere Anzahl von Ziffern. Wir können eine beliebige Zahl aufschreiben, und wir mögen es auch, wenn wir sie so gestalten.


24





32bit und 64bit beziehen sich auf Speicheradressen. Ihr Computerspeicher ist wie Postkästen, jeder hat eine andere Adresse. Die CPU (Central Processing Unit) verwendet diese Adressen, um Speicherplätze in Ihrem RAM (Random Access Memory) zu adressieren. Wenn die CPU nur 16-Bit-Adressen verarbeiten konnte, konnten Sie nur 32 MB RAM verwenden (was zu dieser Zeit sehr groß erschien). Mit 32bit ging es auf 4 + gb (was zu der Zeit sehr groß erschien). Jetzt, da wir 64-Bit-Adressen haben, geht der RAM in Terabyte (was riesig erscheint).
Das Programm ist jedoch in der Lage, mehrere Speicherblöcke für Dinge wie das Speichern von Zahlen und Text zuzuweisen, das hängt vom Programm ab und hängt nicht mit der Größe der einzelnen Adressen zusammen. So kann ein Programm der CPU sagen, ich werde 10 Adressblöcke des Speichers verwenden und dann eine sehr große Zahl oder eine 10-Zeichen-Zeichenfolge oder was auch immer speichern.
Randnotiz: Auf Speicheradressen wird mit "Zeigern" verwiesen, so dass der 32- und 64-Bit-Wert die Größe des Zeigers angibt, der für den Zugriff auf den Speicher verwendet wird.



15



Gute Antwort mit Ausnahme der Details - 16 Bit Adressraum gaben Ihnen 64kb, nicht 32mb, und Maschinen wie die 286 hatten 24-Bit-Adressen (für 16mb). Mit 64-Bit-Adressen gehen Sie weit über Terabytes hinaus - mehr wie 16 Exabytes - Terabytes sind um die Art von Grenzen, die Motherboards / CPUs der gegenwärtigen Generation auferlegen - nicht die Größe der Adressen. - Phil
32-Bit bezieht sich auf die Maschinenwortgröße, nicht auf Speicheradressen. Wie Phil erwähnte, war 286 eine 16-Bit-CPU, verwendete jedoch 24 Bits zum Adressieren durch Speichersegmentierung. x86-CPUs sind 32-Bit, verwenden aber eine 36-Bit-Adressierung. Sehen PAE. - gronostaj
@gronostaj gut x86 haben 32-Bit-Adressierung von 386 bis Pentium. - Ruslan
Upvote, weil dies die einzige richtige Antwort hier ist - 32bit bezieht sich auf 32-Bit-Speicheradressierung, nicht 32-Bit-Arithmetik. - user1207217
@ Benutzer1207217: ?? Also nach Ihrer Argumentation zum Beispiel Z80 oder 8080 sind 16-Bit-Prozessoren (wegen 16-Bit-Speicheradressierung und Speicherbus)? - pabouk


Weil die Anzeige der Nummer mit einzelnen Zeichen und nicht ganzen Zahlen erfolgt. Jede Ziffer in der Zahl wird mit einem separaten Zeichenliteral dargestellt, dessen ganzzahliger Wert beispielsweise durch die verwendete Codierung definiert wird 'a' wird mit einem ASCII-Wert dargestellt 97, während '1' ist vertreten mit 49. Überprüf den Ascii Tisch hier.
Für die Anzeige von "a" und "1" ist das gleiche. Sie sind Zeichenliterale, keine ganzen Zahlen. Jedes Zeichenliteral darf einen Maximalwert von 255 in einer 32-Bit-Plattform haben und den Wert in 8 Bit oder 1 Byte Größe speichern (das ist plattformabhängig, jedoch 8 Bit ist die gebräuchlichste Zeichengröße), daher können sie zusammen gruppiert werden und sein angezeigt. Wie viele separate Zeichen angezeigt werden können, hängt von Ihrem Arbeitsspeicher ab. Wenn Sie nur 1 Byte RAM haben, können Sie nur ein Zeichen anzeigen, wenn Sie 1 GB RAM haben, können Sie gut 1024 * 1024 * 1024 Zeichen anzeigen (zu faul, um die Mathematik zu tun).

Diese Einschränkung gilt jedoch für die Berechnungen, aber ich denke, dass Sie sich für den IPV4-Standard interessieren. Obwohl es nicht ausschließlich mit Computern verwandt ist bit-sizeEs hat irgendwie die Standards beeinflusst. Wenn der IPV4-Standard erstellt wurde, speicherten sie die IP-Werte in 32-Bit-Ganzzahlen. Jetzt gab man einmal die Größe, und es wurde Standard. Alles, was wir über das Internet wissen, war davon abhängig, und dann hatten wir keine IP-Adressen mehr zugewiesen. Wenn also der IP-Standard 64-Bit-revidiert wurde, wird alles funktionieren, einschließlich Ihres Routers (ich nehme an, dass das korrekt ist) und anderer Netzwerkgeräte. Es muss also ein neuer Standard erstellt werden, der nur die 32-Bit-Ganzzahl mit 128-Bit-Eins vertauscht. Und den Rest des Standards angepasst. Hardwarehersteller müssen nur erklären, dass sie diesen neuen Standard unterstützen, und es wird viral. Obwohl es nicht so einfach ist, aber ich denke du hast es verstanden.

Haftungsausschluss: Die meisten der hier genannten Punkte entsprechen meiner Annahme. Ich habe vielleicht wichtige Punkte verpasst, um es einfacher zu machen. Ich bin nicht gut mit Zahlen, also müssen einige Ziffern verpasst haben, aber ich möchte hier auf die Antwort des OP antworten, warum es den PC nicht zum Absturz bringen wird.


13



Ich habe nicht abgelehnt, aber es gibt eine Reihe von Problemen mit Ihrer Antwort. 1 ist 0x31 in ASCII, nicht 0x1. 1 GB = 1024 ^ 3 B. IPv4-Wad wurde erfunden, bevor 32-Bit-CPUs eingeführt wurden. Die Aussage, dass Adressen in 32-Bit-Ganzzahlen gespeichert wurden, steht in Konflikt mit der Frage von OP. Und schließlich IPv6 verwendet 128-Bit-Adressen, nicht 64-Bit. - gronostaj


In Prozessoren gibt es "Wörter". Es gibt verschiedene Wörter. Wenn Leute "32-Bit-Prozessor" sagen, meinen sie meistens "Speicherbusbreite". Dieses Wort besteht aus verschiedenen "Feldern", die sich auf Subsysteme von Computern beziehen, die dem Senden (24 Bits) und dem Steuern (anderen Bits) entsprechen. Ich kann mit genauen Zahlen falsch liegen, machen Sie sich durch Handbücher sicher.

Ein völlig anderer Aspekt ist die Berechnung. SSE- und MMX-Befehlssätze können lange Ganzzahlen speichern. Die maximale Länge ohne Produktivitätsverlust hängt von der aktuellen SSE-Version ab, ist aber immer mehr als 64 Bit.

Aktuelle Opteron-Prozessoren können 256 Bit breite Zahlen verarbeiten (Ich bin mir nicht sicher über Integer, aber Float ist sicher).

Zusammenfassung(1) Die Busbreite ist nicht direkt mit der Berechnungsbreite verbunden, (2) auch andere Wörter (Speicherwort, Registerwort, Buswort usw.) sind nicht miteinander verbunden, andere haben einen gemeinsamen Teiler von 8 oder 16 oder 24 Viele Prozessoren verwendeten sogar 6-Bit-Wörter (aber ihre Geschichte).


12



Nicht wahr, der ursprüngliche Pentium-Prozessor hatte einen 64-Bit-Datenbus für hohe Speicherbandbreite, obwohl es ein 32-Bit-Prozessor war. Der 8088 war ein 16-Bit-Prozessor mit einem 8-Bit-Datenbus. - doug65536