```
unsigned int a = 4294967295;  // (2^32)-1
unsigned int b = 2; 

```

I am trying to figure out the most efficient way to get the high 32 bits of the product of two unsigned integers.
For example, using CUDA programming I can just `unsigned int first32bits = __umulhi(a,b)` and get the high 32 bits.

Are there ways to do such thing in C++? 

Here's my approach:

```
unsigned long c = ( ((unsigned long)a * (unsigned long)b ) >> 32) & 0x00000000FFFFFFFF;

```

Are there any ways to make my approach faster?