short val1 = short.MaxValue;
short val2 = short.MaxValue;
int result = val1;
result |= val2 << 16;
Console.WriteLine( "Result =\t" + result ); //2147450879
Console.WriteLine( "Expected =\t" + int.MaxValue ); //2147483647
答案 0 :(得分:8)
short
已签名,因此最大值为0x7FFF
。连接结果为0x7fff7fff
而不是0x7fffffff
,即2147450879.所以你所看到的实际上是正确的。
答案 1 :(得分:1)
这就是你需要的
ushort val1 = ushort.MaxValue;
ushort val2 = ushort.MaxValue;
int result = val1;
result |= val2 << 15;
答案 2 :(得分:1)
看起来像C#。简短签署。扩展为int的带符号负值将填充最左边的16位。因此,只要“val1”为负,建议的代码就会失败。
此代码有效(请注意,WORD和DWORD是无符号数量):
public static uint MakeDWord(ushort a, ushort b) {
return ((uint)a << 16) | b;
}
答案 3 :(得分:0)
试试这个,类似于&lt;中的MAKEWORD windef.h&gt;:
#define MAKEDWORD(_a, _b) ((DWORD)(((WORD)(((DWORD_PTR)(_a)) & 0xffff)) | ((DWORD)((WORD)(((DWORD_PTR)(_b)) & 0xffff))) << 16))