按位运算

dev*_*ium 2 c# c++ vb.net bit-manipulation

A)(Int32)X | ((Int32)Y << 16);

B)(Int32)X + (Int32)Y * (Int32)Int16.MaxValue;

两者不应该是等价的吗?我从测试中知道第一个按预期工作,但由于某种原因,第二个没有.X和Y都是short(Int16),返回类型是整数(Int32).

不应该Y << 16<=> Y * Int16.MaxValue

dtb*_*dtb 6

要获得所需的行为,您需要乘以0x10000(即UInt16.MaxValue+1).Int16.MaxValue0x7fff.

5 << 16
327680

5 * 0x10000
327680
Run Code Online (Sandbox Code Playgroud)

与十进制系统比较:如果要将数字"移位"5到500,则需要乘以100,而不是99 :-)