标题: 32位数移位变64位问题 [打印本页] 作者: lknh17 时间: 2009-07-02 05:01 标题: 32位数移位变64位问题 程序如下,代码注释也很清楚了
/*
* All this magic is because you have to pass makecontext a
* function that takes some number of word-sized variables,
* and on 64-bit machines pointers are bigger than words.
*/
z = (ulong)t;
y = z;
z >>= 16; /* hide undefined 32-bit shift from 32-bit compilers */
x = z>>16;
makecontext(&t->context.uc, (void(*)())taskstart, 2, y, x)
可是程序是64移32位,不是32位整数移32的吧... 32位机器上,32位整数移32是无意义,但是这里是64位在移动啊?
我写了个程序试验下:
using namespace std;
int main()
{
unsigned long long x,y;
x=(unsigned long long)200000000*10000;
unsigned int m,n;
n=x;
m=x>>32; //这里直接右移32位
y=(((unsigned long long)m)<<32)+2840207360;
cout<<x<<endl<<n<<endl<<m<<endl<<y;
}