32位整数乘法指令实现64位乘法

思路就是将64位数分解为两个32位数

(AB)*(CD)=A*C*(1<<64)+(A*D+B*C)*(1<<32)+B*D

由于计算结果也用64位数保存,所以A*C可以丢弃了,不用做这多余的计算,总共需要3次32位乘法

具体实现如下(同样适用于int64_t):

#include <stdint.h>typedef union {uint64_t qword;struct {int low;int high;} ddword;} ii_t;uint64_t mul(uint64_t a, uint64_t b) {ii_t x = (ii_t)a, y = (ii_t)b;__asm__(:(x.ddword.high),(x.ddword.low),(y.ddword.high),(y.ddword.low));},网站空间,网站空间,香港空间婚姻犹如一艘雕刻的船,看你怎样去欣赏它,又怎样驾驭它。

32位整数乘法指令实现64位乘法

相关文章:

你感兴趣的文章:

标签云: