我正在尝试使用GCC
将两个带符号的64位长数据相乘long long int A;//(A0,A1)
long long int B;//(B0,B1)
你可以帮我解决以下问题吗
答案 0 :(得分:3)
scanf("%lld", &A);
printf("%lld", A);
A*B
答案 1 :(得分:1)
您无法确定long long int
是否为64位。你应该尝试:
#include <stdint.h>
int64_t A, B;
答案 2 :(得分:1)
试试这个,我也在检查并评论我的结果。
void mulul64(uint64 u, uint64 v, uint64 *whi, uint64 *wlo)
{
uint64 u0, u1, v0, v1, k, t;
uint64 w0, w1, w2;
u1 = u >> 32; u0 = u & 0xFFFFFFFF;
v1 = v >> 32; v0 = v & 0xFFFFFFFF;
t = u0*v0;
w0 = t & 0xFFFFFFFF;
k = t >> 32;
t = u1*v0 + k;
w1 = t & 0xFFFFFFFF;
w2 = t >> 32;
t = u0*v1 + w1;
k = t >> 32;
*wlo = (t << 32) + w0;
*whi = u1*v1 + w2 + k;
return;
}