Bei IEEE-Float (Float 32 Bit, Double 64 Bit, Long Double 80 Bit) werden die Zahlen ähnlich wie Zeichen + Magnitude statt Zweierkomplement gespeichert. Der Exponent hat auch keinen normalen Bereich, mit speziellen Werten für Null oder alle ein Bit. Wiki-Artikel für double:
https://en.wikipedia.org/wiki/Double-precision_floating-point_format
Wenn auf Array so etwas wie Radixsort tun Arten von schwimmenden, die den besonderen Wert Fällen nicht enthalten (wie Unendlichkeit, NAN, ...), eine Umwandlung von Zeichen und normalerweise wird ein Betrag zu einem "Zweierkomplement" verwendet. Beispiel C-Makros zum Konvertieren zwischen 64-Bit-Zeichen und -Moditude in vorzeichenloses Long Long (64-Bit-Ganzzahl ohne Vorzeichen) und zurück. Beachten Sie, dass dies dazu führt, dass der konvertierte Vorzeichen- und Größenwert für den negativen Nullpunkt kleiner als der für den positiven Nullwert ist.
// converting doubles to unsigned long long for radix sort or something similar
// note -0 converted to 0x7fffffffffffffff, +0 converted to 0x8000000000000000
// -0 is unlikely to be produced by a float operation
#define SM2ULL(x) ((x)^(((~(x) >> 63)-1) | 0x8000000000000000ull))
#define ULL2SM(x) ((x)^((((x) >> 63)-1) | 0x8000000000000000ull))