Ein 32-Bit-Betriebssystem beschränkt Sie nicht auf benutzerdefinierte Typen, die diese Größe überschreiten. Ihre Anwendung kann zwei 32-Bit-Wörter aufnehmen und sie wie eine 64-Bit-Zahl behandeln. Die meisten Programmiersprachen haben sogar einen "Doppelwort" -Eintakttyp, um die Dinge zu vereinfachen.
Sie können das Konzept weiter erweitern, um einen beliebigen ganzzahligen Präzisionsdatentyp zu erstellen, der nur an den begrenzten Speicher gebunden ist. Im Wesentlichen haben Sie ein Array von Wörtern, und Sie speichern Ihre N -Bit-Nummern in den Bits der Wörter dieses Arrays.
Die Tatsache, dass es ein 32-Bit-Betriebssystem ist, beschränkt die numerische Berechnung, die Sie ausführen können, nicht. Ein Java long
zum Beispiel ist ein 64-Bit Integraltyp, unabhängig davon, wo er gerade ausgeführt wird. Für eine willkürliche Genauigkeit erhöht java.math.BigInteger
den Einsatz und liefert " unendliche Wortgröße "Abstraktion. Und ja, dieses "Feature" ist sogar in 32-Bit-Betriebssystemen verfügbar (weil das zu Beginn nie ein einschränkender Faktor war).
Finden modularen multiplikativen inverse oder Modulare Potenzierung ist eine gängige mathematisch-algorithmische Aufgabe in den Bereichen der Kryptographie.
Eine Identität, die Sie hier verwenden möchten, ist die folgende:
%Vor% Um x = 2 56 (Mod 7) zu finden, müssen Sie NICHT zuerst 2 56
Aber wie findest du y = 2 55 (mod 7)? Nun, eine naive Methode ist, den Prozess linear anzuwenden und zuerst zu versuchen, z = 2 54 (mod 7) und so weiter zu finden. Dies ist eine lineare Potenzierung, aber Sie können es besser machen, indem Sie z. Potenzierung durch Quadrieren .
Das heißt, wenn Sie 2 8 sagen, können Sie es quadrieren, um sofort 2 16 zu erhalten. Sie können das dann quadrieren, um sofort 2 32 zu erhalten.
Es gibt viele ausgeklügelte mathematische Algorithmen, die für die Kryptographie anwendbar sind, und ob sie in einem Programm implementiert sind, das auf einem 32-Bit- oder einem 64-Bit-Betriebssystem läuft, ist nicht direkt relevant. Solange genügend Speicher verfügbar ist, ist der Computer mehr als in der Lage, Arithmetik mit beliebiger Genauigkeit auszuführen.
Gerade weil Arithmetik mit beliebiger Genauigkeit eine nützliche Abstraktion ist, sind viele Hochleistungsbibliotheken verfügbar, so dass Sie Ihre Anwendung auf einem bereits bestehenden Framework aufbauen können, anstatt von Grund auf neu zu bauen.
> Einige Hochsprachen verfügen sogar über Arbitrary mit arithmetischer Arbitrary-Genauigkeit. Python zum Beispiel bietet eine beliebige Genauigkeit int
und long
auf Sprachenebene.
Welches System? Welche Architektur?
Im Allgemeinen erhalten Sie in einer 32-Bit-Architektur Überlaufergebnisse. Einige Sprachen haben eingebaute, beliebig große Zahlentypen, mit denen diese Berechnungen durchgeführt werden können. Beispiele hierfür sind BigDecimal
in Java und das integrierte long int
s in Python.
Ich denke, Ihre Terminologie ist ein wenig verwirrt.
Bei einem 32-Bit-Betriebssystem oder einer 32-Bit-Architektur sind die Maschinenadressen auf 32 Bit beschränkt. Es ist überhaupt nicht ungewöhnlich, dass eine 32-Bit-Architektur über arithmetische Anweisungen verfügt, die mit 64-Bit-Ganzzahlen und / oder 64-Bit-Gleitkommazahlen arbeiten.
Es ist also ziemlich wahrscheinlich, dass eine Maschine mit einer 32-Bit-Architektur (und einem 32-Bit-Betriebssystem) 64-Bit-Arithmetik verwendet und das Ergebnis als 64 Bit long
oder long long
unter Verwendung von 2 speichert aufeinanderfolgende 32-Bit-Wörter.
auch zu anderen Antworten hinzufügen, die eine gute Erklärung einer 32 int und modularen multiplikativen Umkehrung und was nicht
Ich werde erklären, was die 32-Bit-CPU ist
32 bit
CPUs, wie die meisten Leute sie kennen, hängen mit der Adreßbusgröße zusammen
Dies ist, dass die Anzahl der verfügbaren Adressen zum Beispiel auf einem x86 (Ihrem Desktop-Prozessor [AMD, Intel]) Prozessor
Dies erlaubt 2^32
bytes Adressraum oder 4GB
Dies wird normalerweise zwischen der adressierbaren Hardware und dem RAM aufgeteilt. Der Grund für die tatsächliche Implementierung eines 64 bit
Prozessors war, dass wir uns dem 4GB
des RAMs näherten begrenzen
als eine Randnotiz das ist vorher passiert, wenn CPUs waren 16bit
Tags und Links algorithm math cryptography bignum modulo