能力值:
( LV4,RANK:50 )
|
-
-
2 楼
int64 a = 0x93516 *0x181702E1
结果高32位在EDX中,低32位在EAX中
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
不知道在 C# 中怎么取 高 32位 和低 32位呢
谢谢指教了。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
高 32位=a>>32 & 0xFFFFFFFF
低 32位=a & 0xFFFFFFFF
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
不行呀。我测试了
eax = 14F8B589
esi = 00093516
imul esi 后
eax = ACC5F6C6
edx = C117
我的C#代码:
long ll = 0x00093516 * 0x14F8B589;
string s = Convert.ToString(ll, 2);
Console.WriteLine("int64:{0} \n高32位:{1} \n低32位:{2}", Utils.x16(ll) , s.Substring(0, 32) , s.Substring(32)); return;
输出结果:
int64:FFFFFFFFACC5F6C6
高32位:11111111111111111111111111111111 高32位是错误的
低32位:10101100110001011111011011000110
为什么我的 测试 输出的高 32位结果是 0xFFFFFFFF 呢。
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
你这long ll是64位么。。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
long 在C#里面是64位有符号整数
我用 Int64 ll = 0x00093516 * 0x14F8B589;
结果也是一样。。不知道怎么回事 。。郁闷
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
那是你的写法有问题,你用计算器calc.exe算下看看,肯定是对的
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
。。行了。谢谢楼上了。。让我明白 imul 的运算呢。
我都用 long 就好了。
long ll = ((long)0x00093516 * (long)0x14F8B589);
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
在百科看介绍 imul 指令的技术文章。。。一堆堆的文字。。
其实用计算器。算一次就明白呢。呵呵
|
|
|