It is usually best to avoid unnamed "magic" numbers in the code, as it is difficult for the developer to understand what that number means. For this reason, it is good practice to name your constants. For this reason, do not do number 1.
In C ++, it is best to use static_cast rather than C-style. I'm sure there are probably other questions about why this is, but the best reference here is Meyers (Effective C ++). For this reason, prefer 3 over 2, but 3 still suffers from a magic number problem.
Four is best, except that variable names are meaningless, and const can make sense for one or both variables.
I am not sure if there is any difference between any words of the compiled code, but maybe because the literal is interpreted as something other than uint16. For example, it could be uint32, although you should still get the expected result.
source share