如何实现64位无符号乘法

[复制链接]
 楼主| leebai_001 发表于 2012-6-6 21:00 | 显示全部楼层 |阅读模式
C语言里,实现64位无符号乘法
unsigned long long a,b,c;
a = b * c;
这个能实现吗?
使用Keil uVision4 测试时,发现当a>0x80000000,计算异常。
哪位测试过呢?
lllaaa 发表于 2012-6-7 08:42 | 显示全部楼层
自己模仿竖式运算写一个啊。只不过笔算的时候是按照单个数字来运算。你可以用long为单位去算
IJK 发表于 2012-6-7 10:44 | 显示全部楼层
本帖最后由 IJK 于 2012-6-7 10:46 编辑

64位无符号乘法是个有趣的话题,STM32应该支持它。我用 IAR EWARM,用simulator进行调试,芯片用STM32,实测没有问题。问题的关键是进行强制类型转换。

2张图可以说明问题:

乘法的结果[正确]

乘法的结果[正确]

相应的ARM汇编,用了SMULL

相应的ARM汇编,用了SMULL
IJK 发表于 2012-6-7 10:50 | 显示全部楼层
多说一句,Keil MDK应该也支持64位无符号乘法。
当然,一定程度上这取决于用的芯片。
王紫豪 发表于 2012-6-7 21:27 | 显示全部楼层
MDK 是支持的; 当然, 应该说 realview 支持
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

93

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

18

主题

93

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部