c# - 按位运算

标签 c# c++ vb.net bit-manipulation

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.MaxValue0x7fff

5 << 16
327680

5 * 0x10000
327680

与十进制相比:如果你想将数字 5“移动”到 500,你需要乘以 100,而不是 99 :-)

关于c# - 按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1169227/

相关文章:

c# - 在 C# 中将参数传递给正在运行的进程

c# - 用鼠标移动绘制的线条

.net - VB.NET 使用多个 Catch block 尝试 Catch

c# - 不使用 AssemblyName 解析程序集限定名

c# - C# 属性可以访问目标类吗?

c++ - 枚举声明和定义

c++ - CRC/Parity/Hamming 保护 16 位并行总线

c++ - C++ 中循环移位(旋转)操作的最佳实践

VB.Net 形式的非共享方法被引用就像它们被共享一样?

mysql - 列计数与第 1 行的值计数不匹配