Logisches Bitmuster (Bits der Wertdarstellung), d. H. Werte von Binärziffern können nur erhalten werden, wenn der ursprüngliche vorzeichenbehaftete Wert nicht negativ war, da negative Werte nicht durch eine vorzeichenlose Ganzzahl dargestellt werden können. Alles was Sie tun müssen, ist Ihre signierten Wert Ihrem unsigned integrales Objekt zuweisen und Sie sind fertig
uint64_t u_val = s_val;
Eine explizite Umwandlung nicht erforderlich ist, kann aber verwendet werden Compiler-Warnungen zu unterdrücken.
Wie für das physikalische Bitmuster (d. H. Was Sie im Rohspeicher sehen, Bits der Objektdarstellung), können Sie es einfach nicht auf diese Weise "konvertieren". Die C++ - Sprache bietet keine Konvertierungsmethoden, mit denen das physische Bitmuster erhalten werden könnte.Alles, was Sie von dem signierten Objekt als unsigned Objekt der gleichen Größe
STATIC_ASSERT(sizeof(int64_t) == sizeof(uint64_t));
uint64_t u_val = reinterpret_cast<uint64_t&>(s_val);
Wieder der Speicher belegt ist reinterpret tun können, ist dies nicht eine Umwandlung, sondern ein Speicher Umdeutung. Dies funktioniert nicht garantiert und das ist generell illegal.
Up-Stimmen für alle; danke für deinen Beitrag. Ich denke, dass static_cast in der Tat die richtige Antwort ist. Für den Rekord hatte ich es zuerst versucht, aber wegen eines dümmlichen Fehlers an anderer Stelle dachte ich, es würde das Bitmuster nicht erhalten. Um die Frage zu klären, ist es in Ordnung, dass s_val! = U_val (was der Fall ist, wenn s_val <0). Die Bits sind was zählt. – bbg