In C++ möchte ich die Bits von double myval = 1.3;
bekommen Es ist 0x3FF4CCCCCCCCCCCC aber wie bekomme ich es, ohne Alias-Regeln zu brechen und undefiniertes Verhalten zu tun?Wie erhalte ich Float/Double Bits ohne unbestimmtes Verhalten?
Antwort
Sie können die Bits Byte für Byte in ein Integer-Objekt kopieren. Aliasing mit char
ist erlaubt. Dann können Sie die Bits dieser Ganzzahl verschieben und maskieren, um die Werte einzelner Bits zu erhalten.
Der einfachste Weg, byteweise zu kopieren, ist std::memcpy
. Sie müssen sicherstellen, dass Ihr Integertyp groß genug ist.
double myval = 1.3;
unsigned long long myval_int = 0;
static_assert(sizeof myval_int == sizeof myval);
std::memcpy(&myval_int, &myval, sizeof myval);
std::cout << std::hex << myval_int;
Für einen besseren Weg, um sicherzustellen, dass Sie entsprechend dimensionierte Integer-Typ haben, sehen http://www.boost.org/doc/libs/1_65_1/libs/integer/doc/html/boost_integer/integer.html
Beachten Sie, dass das Kopieren Beginn der Ganzzahl in funktioniert nur, wenn die ganze Zahl die gleiche Größe hat - oder wenn Integer größer ist, dann muss die CPU Little Endian sein. Wenn Integer größer ist und CPU Big Endian ist, müssen Sie mit einem Offset kopieren.
- 1. Wie erhalte ich die BITS Länge von NSUintger, NSString
- 2. Wie setze ich Bits in Byte ohne Schleife
- 3. Wie ändere ich eine 32bit Register spezifische Bits, ohne andere Bits zu ändern?
- 4. Wie kann ich Bits effizient mischen?
- 5. AngularJS Brauch für ein ng-unbestimmtes Attribut Richtlinie über Kontrollkästchen
- 6. Wie Bits von Nummer
- 7. Golang seltsam big.Int Verhalten für kleine Anzahl von Bits
- 8. Wie erhalte ich einen Dateipfad ohne Erweiterung in PowerShell?
- 9. Wie erhalte ich den minimalen Messwert ohne eine Dimension?
- 10. Wie mache ich ein Array von Bits?
- 11. Wie erstelle ich eine Zeichenfolge aus Bits?
- 12. Wie erhalte ich Benutzerrechte?
- 13. Wie bekomme ich die Bits eines "double" als "long"
- 14. NHibernate Erhalte Objekte ohne Proxy
- 15. Wie erhalte ich TextMate-Anführungszeichen in Emacs?
- 16. Ungerade Verhalten ohne virtuelle Vererbung
- 17. Erhalte FTS-Indexnamen ohne Informationsschema
- 18. float bits und striktes Aliasing
- 19. BITS-Fehlercodes
- 20. Scala: Wie erhalte ich einen "statischen Slot"?
- 21. Wie erstelle ich ein benutzerdefiniertes Erlang-Verhalten?
- 22. Wie erhalte ich TYPE_VIEW_HOVER_ENTER AccessibilityEvent?
- 23. Wie erhalte ich eine MongoSecurityException?
- 24. Wie erhalte ich MemberInfo's MemberInfo?
- 25. Wie erhalte ich den Inhalt?
- 26. JavaScript: Wie erhalte ich Pfeiltasten?
- 27. Wie erhalte ich nützlichere Fehlermeldungen?
- 28. iOS - Generiere und spiele unbestimmtes, einfaches Audio (Sinus)
- 29. Wie setze ich 1 für alle Bits, ohne die Länge der Spalte zu kennen?
- 30. Gurobi oder CPLEX? Quadratisches unbestimmtes Ziel - quadratische positiv-semidefinite Bedingungen
statische Behauptung scheint der beste Weg, und das erfordert keine Boost –
@ Acidzombie24 Sie können immer diese Vorlagen immer wieder implementieren, wenn Sie bevorzugen. – user2079303
Ist das memcpying zu lange wirklich erlaubt? Ich glaube, das bricht eine Art C++ - Regel. –