大整数乘法

Hellovictoria   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了




回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复