首页
社区
课程
招聘
在C++中如何实现
发表于: 2006-6-21 09:50 3875

在C++中如何实现

2006-6-21 09:50
3875
在汇编中两数的积的低8位放在EAX中,高8位放在EDX中。在C++中如何取得两数积的高8位(当两数的积是整数且超过了8位)?

请指教。

[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NIU
2
取低位用按位与AND(C语法中的&),取高位用右移shr(C语法中的/2,每除一次2即右移一位,注意不要越界),你再思考一下吧。
2006-6-21 10:15
0
雪    币: 226
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
在C++中,最大只能表示10位的整数,而两个大整数的积(如0x98765432*0x72345678=0x4403dd0695e84370)的前高8位"4403dd06"无法取得。请赐教。
2006-6-21 11:32
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
4
利用大整数乘法,最后只需要在数组中取相应位数即可
2006-6-21 11:45
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
5
/* 利用结构来取int64的高低整数。*/

#include <windows.h>
#include <stdio.h>

typedef struct MY_INT64{
  union{
    struct{
      unsigned long loDWORD;
      long hiDWORD;
    };
    LONGLONG bigInt;
  };
}MyInt64,*pMyInt64;

int main()
{
  _int64 i,j;
  MyInt64 i64 = {0};
  pMyInt64 pi64;
  i = 0x98765432;
  j = 0x72345678;
  pi64 = &i64;
  *(_int64*)pi64 = i * j;
  printf("%X%X\n",pi64->hiDWORD,pi64->loDWORD);
  return 0;
}
2006-6-21 12:16
0
雪    币: 226
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
问题解决。
多谢各位指导,特别是小虾大师!!!
2006-6-21 15:28
0
游客
登录 | 注册 方可回帖
返回
//