Was ist der beste Weg, zwei uints zu einem ulong in c # zu kombinieren?

8

Was ist der beste Weg, zwei uints zu einem ulong in c # zu kombinieren, indem die high / low uints gesetzt werden.

Ich weiß, dass Bitshifting es kann, aber ich kenne die Syntax nicht, oder vielleicht gibt es andere APIs, die den BitConverter unterstützen, aber ich sehe keine Methode, die das tut, was ich will.

    
Jason Coyne 30.07.2009, 21:17
quelle

4 Antworten

18
%Vor%

Die Besetzung ist sehr wichtig. Wenn Sie die Umwandlung weglassen, bedenkt man, dass high vom Typ uint ist (was 32 Bits entspricht), verschieben Sie einen 32-Bit-Wert um 32 Bits nach links. Shift-Operatoren für 32-Bit-Variablen verwenden Shift-Dateien nach right-hand-side mod 32. Effektiv ist das Verschieben von uint 32 Bits nach links ein No-op . Casting nach ulong verhindert dies.

Die Überprüfung dieser Tatsache ist einfach:

%Vor%     
Mehrdad Afshari 30.07.2009, 21:21
quelle
2
%Vor%

Die Operatoren << und >> werden nach links (höher) bzw. rechts (unten) verschoben. highUInt << 32 ist funktional identisch mit highUInt * Math.Pow(2, 32) , kann aber schneller sein und ist (IMO) einfachere Syntax.

    
Adam Robinson 30.07.2009 21:20
quelle
1

Sie müssen das highInt vor dem Bitshift in ein ulong konvertieren:

%Vor%     
Aric TenEyck 30.07.2009 21:22
quelle
1

Codierung:

%Vor%

Decodierung:

%Vor%     
Paul van Brenk 30.07.2009 21:46
quelle

Tags und Links