注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
Hellovictoria的个人空间 https://home.eeworld.com.cn/space-uid-283823.html [收藏] [复制] [分享] [RSS]
日志

大整数乘法

已有 732 次阅读2012-8-7 14:29 |个人分类:芯片阵列运算器验证

  在做16位芯片(32位数据线)阵列运算器的测试时,需要用Visual Studio写C程序做大整数的加减乘除相关的运算。
  发现一个奇怪的现象:
    两个32位的数据相乘,放入一个64位的变量中,乘出来的结果64位,高32位全清零了。这不对?
    两个16位的数据相乘,放入一个32位的变量中。乘出来的结果32位,都是正确的。
    如何得到两个32位的数据相乘的正确结果呢?
    做32位的数据的乘法的时候,先将32位的两个乘数扩展为64位的,再乘。
unsigned short a=0xffff;
unsigned short b=0xffff;
unsigned int c=a*b; //乘积是正确的

unsigned long aa=0xffffffff;
unsigned long bb=0xffffffff;
unsigned long long cc=a*b;  //乘积的高32位清零了
unsigned __int64 cc=a*b;    //乘积的高32位清零了
unsigned long long cc=(unsigned long long)aa*(unsigned long long)bb  //OK了




评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章