_int64 x = 1<<40;
cout<<x<<endl;
//x的输出为0,是因为64位整数不能直接作移位运算。
//如下实现移位操作:
//64左移len 位
U64 move_left64(U64 a, int len)
{
U32 *p = (U32*) &a;
if (len <32)
{
*(p+1) <<= len;
U32 tmp = (*p) >> (32-len);
*(p+1) |= tmp;
*p <<= len;
}
else
{
*(p+1) = *p;
*p = 0x00000000;
*(p+1) <<= (len-32);
}
return a;
}
//64右移len 位
U64 move_right64(U64 a, int len)
{
U32 *p = (U32*) &a;
if (len<32)
{
*p >>= len;
U32 tmp = *(p+1) << (32-len);
*p |= tmp;
*(p+1) >>= len;
}
else
{
*p = *(p+1);
*(p+1) = 0x00000000;
*p >>= (len-32);
}
return a;
}