A) (Int32)X | ((Int32)Y << 16)
;
B) (Int32)X + (Int32)Y * (Int32)Int16.MaxValue
;
两者不应该是等价的吗?我从测试中知道第一个按预期工作,但由于某种原因第二个没有。 X 和 Y 都是短整型 ( Int16
),返回类型是整数 ( Int32
)。
不应该Y << 16
<=> Y * Int16.MaxValue
?
最佳答案
要获得所需的行为,您需要乘以 0x10000
(即 UInt16.MaxValue+1
)。 Int16.MaxValue
是 0x7fff
。
5 << 16
327680
5 * 0x10000
327680
与十进制相比:如果你想将数字 5“移动”到 500,你需要乘以 100,而不是 99 :-)
关于c# - 按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1169227/