我有一个数据为8989898989898989,我怎么把它分为低32位和高32为呢?马上给分 我有一个数据为8888888888888888;我怎么把它分为低32位和高32为呢?用什么函数呢?最好有简单的例子 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 long long n = 43287432718943214;int *l, *h;*l = ( int * )&n;*h = ( int * )( &n + 4 ); __int64 value = xxxxxx;DWORD mask = ~0;DWORD l = value & mask;DWORD h = (value>>32) & mask; ULARGE_INTEGER把它赋给这个结构后, 再取部分值typedef union _ULARGE_INTEGER { struct { DWORD LowPart; DWORD HighPart; }; ULONGLONG QuadPart;} ULARGE_INTEGER; 使用C++的特色更加简单:union { __int64 v64; long v[2];}v64=8989898989898989;l=v[0];h=v[1]; 在上面,mask=~0是什么意思啊,而value&mask有什么作用? (value>>32) & mask中(value>>32)又是什么意思呢?我真的不懂,请帮忙 ~是按位取反,>>是向右位移 mask=~0是是按位取反,(value>>32) & mask中(value>>32)又是是向右位移32位 _int64 sy;sy=88888888888888888888 //20个8ULARGE_INTEGER sun;sun.LowPart=sy;sun.HighPart=sy;这样行吗? 这样呢?ULARGE_INTEGER sun=88888888888888888888; __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 __int64 value =888888888888888 ; DWORD mask = ~0; DWORD l = value & mask; DWORD h = (value>>32) & mask; 我试了一下,这样行 现在又如果把两个32位的数合成一个64位的呢? 拆分:__int64 nVaule = 8888888888888888;DWORD dwLow = (DWORD)nValue;DWORD dwHigh = (DWORD)(nValue>>32);合并:__int64 nValue2 = ((__int64)dwHigh)<<32) | dwLow; __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。 最简单的方法就是将你的这个赋值给一个变量入下:LARGEINT lInt=xxxx你的值;//64位DWORD highWORD=lInt.HighLlong;//32位低DWORD lowWORD=lInt.LowLlong;//32位高祝顺利! __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; __int64 value =888888888888888 ; DWORD mask = ~0; DWORD l = value & mask; DWORD h = (value>>32) & mask;这样的结果为:l=2457308728;h=206960-----------------------把它们又换回64位_int64 value=0;//000000000000000000000000DWORD l=2457308728;DWORD h=206960;_int64 temp1,temp2;temp1=h;temp1<<32;temp2=l;value=temp1|temp2;//或一下 int iHiWord=HIWORD(yourNumber),iLoWord=LOWORD(yourNumber); 要这样: __int64 value=0;DWORD l=2457308728;DWORD h=206960;_int64 temp1,temp2,temp3;temp1=h;temp3=(temp1<<32);temp2=l;value=temp3|temp2; 行了,谢谢sh210在qq上给我的帮助,也谢谢大家,揭贴了 行了,谢谢sh210在qq上给我的帮助,也谢谢大家,揭贴了 为什么多线程在win7下是这样??? MFC有没有关于.DWF控件的问题 vc6中有类似togglebutton的控件吗 winpcap很难抓到本机的包 怎么将emf文件格式转化为jpg格式,谢谢! 急问!vc如何调用C语言库函数? 登陆论坛时的帐号和密码保存在哪里啊 如何使文本框中只能输入数字(包括小数) 救命啊!!用的指针会相互之间冲突吗? 工具栏显示动画的问题 问ActiveX高手:在设计一个ActiveX控件时用到关键字;USES_CONVERSION,这个关键字有什么作用? 工具栏的问题?
int *l, *h;
*l = ( int * )&n;
*h = ( int * )( &n + 4 );
DWORD l = value & mask;
DWORD h = (value>>32) & mask;
struct {
DWORD LowPart;
DWORD HighPart;
};
ULONGLONG QuadPart;
} ULARGE_INTEGER;
__int64 v64;
long v[2];
}v64=8989898989898989;l=v[0];
h=v[1];
(value>>32) & mask中(value>>32)又是什么意思呢?
我真的不懂,请帮忙
(value>>32) & mask中(value>>32)又是是向右位移32位
sy=88888888888888888888 //20个8
ULARGE_INTEGER sun;
sun.LowPart=sy;
sun.HighPart=sy;
这样行吗?
ULARGE_INTEGER sun=88888888888888888888;
__asm {
movq mm0, [val]
movd eax, mm0
psrld mm0, 32
movd ebx, mm0
emms
}
eax is high dword, edx is low dword
DWORD l = value & mask;
DWORD h = (value>>32) & mask;
我试了一下,这样行
现在又如果把两个32位的数合成一个64位的呢?
__int64 nVaule = 8888888888888888;
DWORD dwLow = (DWORD)nValue;
DWORD dwHigh = (DWORD)(nValue>>32);
合并:
__int64 nValue2 = ((__int64)dwHigh)<<32) | dwLow;
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。
DWORD lowWORD=lInt.LowLlong;//32位高
祝顺利!
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;
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;//或一下
__int64 value=0;
DWORD l=2457308728;
DWORD h=206960;
_int64 temp1,temp2,temp3;
temp1=h;
temp3=(temp1<<32);
temp2=l;
value=temp3|temp2;