wie teilt 64bit integer zu zwei 32bit-Ganzzahlen
Ich möchte teilen Sie eine 64-bit-integer in zwei 32-bit-Ganzzahlen:
var bigInt = 0xffffff;
var highInt = bigInt >> 8 //get the high bits 0xfff
var lowInt = bigInt //cut of the first part (with &)?
console.log(highInt); //0xfff
console.log(lowInt); //0xfff
//set them together again
var reBigInt = (highInt << 8) + lowInt;
Leider weder immer die highInt noch immer die lowInt funktioniert... Könnte jemand mir die Antwort geben, wie ich brauche, um den bitweisen Operatoren?
hinsichtlich
- Ich könnte etwas fehlen, aber seit Wann 0xFFFFFF ist 64 bit?
- das Prinzip der operation ist die gleiche und sollte auch die Arbeit mit nicht voll genutzt 64bits
- Verschiebung von 8 bits werden nicht geben Sie die 32-bit-zahlen, aber 8-bit-zahlen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
BEARBEITEN JavaScript Ganzzahlen entspricht mit der IEEE-double-precision-format, so gibt es keine Möglichkeit zum speichern von beliebigen 64-bit-Ganzzahlen ohne Verlust der Genauigkeit, außer durch custom-big-integer libraries. Bitweise Operationen auf den möglicherweise beschnitten Werte, die offensichtlich keinen Sinn machen.
Im Allgemeinen, Sprachen, die Unterstützung von 64-bit-Ganzzahlen:
Einem 64-bit-Muster lieben, ist
0xffffffffffffffff
. Extrahieren Sie die oberen 32 bits, die Sie brauchen, um die Verschiebung von 32:>> 32
. Extrahieren Sie die unteren 32 bit, nur mit 32 Einsen:& 0xffffffff
.Du hast das Prinzip richtig - Ihre arithmetische Operationen auf, wie viele bits zu verschieben oder die Maske ist einfach falsch.
In JavaScript werden alle zahlen vertreten mit 53 bits. JavaScript verwendet floating-point-Darstellung zu speichern, werden alle zahlen intern, was bedeutet, dass ganze zahlen sind, werden als floating-point-zahlen (Mantisse 53 bit)
Also mit 53 bits stellen wir max 2^53 = 9007199254740992.
Aber Sie können nicht verwenden Sie die Rechte Umschalttaste und die binären Operationen zu extrahieren unteren 32 bits und mehr 21 bits sogar von 53-bit-zahlen.
Der Grund ist, wenn wir anwenden, binären und-operator auf eine beliebige Anzahl - Javascript konvertieren Sie zuerst, dass diese Zahl 32 bit-Zahl unterzeichnet, gelten die binäre operation und gibt das Ergebnis aus. Dies bedeutet, dass jedes bit, das sitzt in der position höher als 32 verworfen werden können.
Ich habe folgende Ansatz zum extrahieren der höheren (21 bit) und unteren (32 bits) Teile aus einer positiven Zahl <= 2^53.
Nur um zu bestätigen, über die Logik korrekt ist, probieren wir die Gebäude der bigNumber aus zwei teilen