日期:2014-05-17  浏览次数:21485 次

两个int 如何合并成一个long
两个int 如何合并成一个long???

就是两个32位的变成一个64位的

------解决方案--------------------
int a=0,b=0;
long c;
c=a;
c<<32;
c=c+b;
------解决方案--------------------
在C#中,int是32位的,long是64位的。

所以可以通过位运算把两个int合并成一个long:

C# code

long foo(int h, int l)
{
    return (h << 32) + l;
}

------解决方案--------------------
但是,上面这个函数是有陷阱的,陷阱在哪里呢?

在MSDN里面,有详细的解释:

<< Operator (C# Reference)
http://msdn.microsoft.com/en-us/library/a1sway8w.aspx

If the first operand is an int or uint (32-bit quantity), the shift count is given by the low-order five bits of the second operand. That is, the actual shift count is 0 to 31 bits.

If the first operand is a long or ulong (64-bit quantity), the shift count is given by the low-order six bits of the second operand. That is, the actual shift count is 0 to 63 bits.


因此,上面的函数应该修改为:

C# code

public static long Merge(int high, int low)
{
    return ((long)high << 32) + low;
}