Quelle est la meilleure façon de combiner deux UINTS dans une ulong en C #, en réglant les utins hauts / bas. P>
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. P>
4 Réponses :
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.
C'est faux. Highint << 32 == Highint Code> Si
Highint code> est un
uint code>.
uint test = 1u; Console.WriteLine(test << 32); // prints 1 Console.WriteLine((ulong)test << 32); // prints (ulong)uint.MaxValue + 1
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 i> 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.
Vous devez convertir le Hightint en Ulong avant que vous soyez BitShift:
ulong output = highInt; output = output << 32; output += lowInt;
codage: décodage: p>