gpt4 book ai didi

c - 获取 32x32 乘法的高 32 位

转载 作者:行者123 更新时间:2023-11-30 21:37:02 25 4
gpt4 key购买 nike

我使用的 MCU 不支持 long long 类型。我无法转换为 long long

我需要一个函数来获取 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;
}

,但是功能有问题;我该如何修复它?

最佳答案

如果您使用标准尺寸的类型,则可以执行此操作:

#include <stdint.h>

...

uint32_t a = 0x1234; b = 0x5678;
uint64_t result = (uint64_t)a * b;
uint32_t high = (result >> 32) && 0xffffffff;
uint32_t low = result && 0xffffffff;

<stdint.h>是随 C99 引入的,因此如果您的编译器不是太古老,您很可能可以使用此功能。

关于c - 获取 32x32 乘法的高 32 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38961903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com