我有一个数据为8888888888888888;
我怎么把它分为低32位和高32为呢?
用什么函数呢?最好有简单的例子

解决方案 »

  1.   

    long long n = 43287432718943214;
    int *l, *h;
    *l = ( int * )&n;
    *h = ( int * )( &n + 4 );
      

  2.   

    __int64 value = xxxxxx;DWORD mask = ~0;
    DWORD l = value & mask;
    DWORD h = (value>>32) & mask;
      

  3.   

    ULARGE_INTEGER把它赋给这个结构后, 再取部分值typedef union _ULARGE_INTEGER { 
        struct {
            DWORD LowPart; 
            DWORD HighPart; 
        };
        ULONGLONG QuadPart;
    } ULARGE_INTEGER; 
      

  4.   

    使用C++的特色更加简单:union {
       __int64 v64;
       long v[2];
    }v64=8989898989898989;l=v[0];
    h=v[1];
      

  5.   

    在上面,mask=~0是什么意思啊,而value&mask有什么作用?
       (value>>32) & mask中(value>>32)又是什么意思呢?
    我真的不懂,请帮忙
      

  6.   

    ~是按位取反,>>是向右位移
      

  7.   

    mask=~0是是按位取反,
    (value>>32) & mask中(value>>32)又是是向右位移32位
      

  8.   

    _int64 sy;
    sy=88888888888888888888   //20个8
    ULARGE_INTEGER sun;
    sun.LowPart=sy;
    sun.HighPart=sy;
    这样行吗?
      

  9.   

    这样呢?
    ULARGE_INTEGER sun=88888888888888888888;
      

  10.   

    __int64 val=88888888888888888888;
    __asm {
      movq mm0, [val]
      movd eax, mm0
      psrld mm0, 32
      movd ebx, mm0
      emms
    }
      eax is high dword, edx is low dword
      

  11.   

    __int64 value =888888888888888 ;  DWORD mask = ~0;
      DWORD l = value & mask;
      DWORD h = (value>>32) & mask;
      我试了一下,这样行
      现在又如果把两个32位的数合成一个64位的呢?
      

  12.   

    拆分:
    __int64 nVaule = 8888888888888888;
    DWORD dwLow = (DWORD)nValue;
    DWORD dwHigh = (DWORD)(nValue>>32);
    合并:
    __int64 nValue2 = ((__int64)dwHigh)<<32) | dwLow;
      

  13.   

    __int64 value =888888888888888 ;  DWORD mask = ~0;
      DWORD l = value & mask;
      DWORD h = (value>>32) & mask;
      我试了一下,这样行
      现在又如果把两个32位的数合成一个64位的呢?  哈哈,反过来不就行了吗?
      __int64 value;
      DWORD l=0x87654321;
      DWORD h=0x9;  value = ((__int64)h<<32) + l;
      value的值就等于0x987654321。
      

  14.   

    最简单的方法就是将你的这个赋值给一个变量入下:LARGEINT lInt=xxxx你的值;//64位DWORD highWORD=lInt.HighLlong;//32位低
    DWORD lowWORD=lInt.LowLlong;//32位高
    祝顺利!
      

  15.   

    __int64 value =888888888888888 ;
     DWORD mask = ~0;
      DWORD l = value & mask;
      DWORD h = (value>>32) & mask;
    这样的结果为:
    l=2457308728;h=206960
    -----------------------
    把它们又换回64位
    _int64 value=0;
    DWORD l=2457308728;
    DWORD h=206960;
    _int64 temp1,temp2;
    temp1=h;
    temp1<<32;
    temp2=l;
    value=temp1|temp2;
      

  16.   

    __int64 value =888888888888888 ;
     DWORD mask = ~0;
      DWORD l = value & mask;
      DWORD h = (value>>32) & mask;
    这样的结果为:
    l=2457308728;h=206960
    -----------------------
    把它们又换回64位
    _int64 value=0;//000000000000000000000000
    DWORD l=2457308728;
    DWORD h=206960;
    _int64 temp1,temp2;
    temp1=h;
    temp1<<32;
    temp2=l;
    value=temp1|temp2;//或一下
      

  17.   

    int iHiWord=HIWORD(yourNumber),iLoWord=LOWORD(yourNumber);
      

  18.   

    要这样: 
    __int64 value=0;
    DWORD l=2457308728;
    DWORD h=206960;
    _int64 temp1,temp2,temp3;
    temp1=h;
    temp3=(temp1<<32);
    temp2=l;
    value=temp3|temp2;
      

  19.   

    行了,谢谢sh210在qq上给我的帮助,也谢谢大家,揭贴了
      

  20.   

    行了,谢谢sh210在qq上给我的帮助,也谢谢大家,揭贴了