What is the best way to combine two uints into a ulong in c#

bit-shift, c#, uint, ulong

Solution

ulong mixed = (ulong)high << 32 | low;

The cast is very important. If you omit the cast, considering the fact that `high` is of type `uint` (which is 32 bits), you'll be shifting a 32 bit value 32 bits to the left. Shift operators on 32 bit variables will use shift stuff by `right-hand-side` mod 32. Effectively, shifting a `uint` 32 bits to the left is a no-op. Casting to `ulong` prevents this.

Verifying this fact is easy:

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

Problem

What is the best way to combine two uints into a ulong in c#, setting the high/low uints. I know bitshifting can do it, but I don't know the syntax, or there maybe other APIs to help like BitConverter, but I don't see a method that does what I want.

Original source