long long
タイプをサポートしていないMCUを使用しています。 long long
にキャストできません。32ビット32倍の32ビット32ビット乗算
32ビット/ 32ビット乗算の上位32ビットを取得する関数が必要です。
のx86 ASMは、このようなものです:
__asm {
mov eax, a
mov ecx, b
mul ecx
mov eax, edx
}
は、同じ機能をするだろうCコードはありますか?試しました
UINT32 umulm(UINT32 a, UINT32 b)
{
UINT32 i, r;
r = 0;
for (i = 1; i < 32; i++)
if (a & (1 << i))
r += b >> (32 - i);
return r;
}
ですが、機能に問題があります。どうすればそれを修正できますか?
多くの32ビットCPUは64ビットタイプをサポートしていません。しかし、準拠したCコンパイラは、あなたのコードはx86であるため、準拠したコンパイラを使うべきです。正式に準拠していないコンパイラを見つけるのは、準拠したコンパイラよりも難しいです。 – Olaf
x86またはx86以外のアーキテクチャでこれを行いたいですか?あなたの質問からはっきりと分かりません。 – rjp
正確なマシンを明確にしない限り、唯一の答えは、自分で多倍精度乗算関数を書くことです。 – EOF