I unsigned long-Wert in zwei 16-Bit-register.For Beispiel gespeichert werden soll, wenn ich (-2,147,483,648 to 2,147,483,647)
long-Wert habe, dann Formel verwende ich wie:Speicher unsigned long-Wert in zwei 16-Bit-Registern
v[0] = myValue % 65536
v[1] = myValue/65536
Um Wert zu erhalten aus registrieren
outVal = reg0 + (reg1 * 65536)
Aber wie für unsigned long zu tun, den Wertebereich von 0 to 4,294,967,295?
ist
Wissen Sie, dass Formel funktioniert? Weil es für mich ziemlich unheimlich aussieht. Es sollte mit unsigned Operationen funktionieren, aber signiert .. Ich weiß es nicht, es macht mich nur sehr unangenehm – harold
Es wird Ihnen falsche Ergebnisse in den oberen 16 Bits geben, wenn Sie einen ursprünglich negativen Wert zurück, es sei denn, Sie speichern die angeblich 16-Bit-Werte in einer vorzeichenbehafteten 32-Bit-Variablen, ja (was irgendwie gegen den Zweck ist). Und natürlich wird es überhaupt nicht funktionieren, wenn der Operator '/' eine Float-Division ist, die danach auf die nächste ganze Zahl gerundet wird, und nicht eine ganzzahlige Division. – CherryDT
Die von Ihnen angezeigten Werte sind Min/Max-Werte eines 'int'. Sie möchten es in 2x16 Bit speichern = 32 Bit = Größe eines 'Int'. Aber Sie fragen, wie man ein ** langes ** speichert, welches 64 Bits ist? Was willst du also speichern? – Arjan