我使用的MCU不支持long long
類型。我不能投到long long
。獲取高32位的32x32乘法
我需要一個函數來獲得32位/ 32位乘法的高32位。
86 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