9
votes

Quelle est la meilleure façon de combiner deux utints dans une ulong en C #

Quelle est la meilleure façon de combiner deux UINTS dans une ulong en C #, en réglant les utins hauts / bas.

Je sais que BitShifting peut le faire, mais je ne connais pas la syntaxe, ni d'autres API pour aider à aimer Bitconverter, mais je ne vois pas une méthode qui fait ce que je veux.


0 commentaires

4 Réponses :


2
votes
ulong output = (ulong)highUInt << 32 + lowUInt
The << and >> operators bitshift to the left (higher) and right (lower), respectively. highUInt << 32 is functionally the same as highUInt * Math.Pow(2, 32), but may be faster and is (IMO) simpler syntax.

1 commentaires

C'est faux. Highint << 32 == Highint Si Highint est un uint .



19
votes
uint test = 1u;
Console.WriteLine(test << 32); // prints 1
Console.WriteLine((ulong)test << 32); // prints (ulong)uint.MaxValue + 1

3 commentaires

Juste hors de curiosité, pourquoi la distribution est-elle nécessaire?


Si élevé est juste un int, High High << 32 sera tous des zéros, car vous venez de passer à tous ceux de la variable. Vous en avez besoin pour être un entier 64 bits avant Vous commencez à le déplacer.


Aric: "Vous venez de déplacer tout ce qui est complètement hors de la variable" Ce n'est pas complètement vrai. Lisez ma réponse mise à jour.



1
votes

Vous devez convertir le Hightint en Ulong avant que vous soyez BitShift:

ulong output = highInt;
output = output << 32;
output += lowInt;


0 commentaires

1
votes

codage: xxx

décodage: xxx


0 commentaires