c++ - 在 C++ 中获取有符号整数乘法的高部分

标签 c++

如何在 C++ 中手动计算有符号乘法的高位部分?喜欢Getting the high part of 64 bit integer multiplication (仅限无符号),但如何计算进位/借位?

我不是说转换成更大的类型(那很简单),而是真正的手动计算,所以它也适用于 int128_t。 我的目标是编写一个模板函数,它始终为有符号和无符号参数返回正确的高部分 (u/int8..128_t):

template <typename Type>
constexpr Type mulh(const Type& op1, const Type& op2) noexcept
{
    if constexpr (std::is_signed_v<Type>)   return ???;
    else                                    return see link;
}

最佳答案

看起来你正在实现通常可用的东西 编译器 builtin functions .

在标准 C++ 中实现这些结果会导致代码效率较低。这作为脑力锻炼仍然很有趣,但为什么你要我们破坏它的整体呢?

关于c++ - 在 C++ 中获取有符号整数乘法的高部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57384467/

相关文章:

C++ 指向类实例的指针

c++ - 为 x,y,z 坐标实现 operator<

c++ - 修改编译后的可执行内存分配

c++ - 模板中的 float 转换

c++ - 编译器是否需要内联基类中的虚函数和最终函数?

c++ - 编译器优化

c++ - 计数位数 : How does this line work ? n=n&(n-1);

c++ - For循环,检查相同的对

c++ - 为什么 C++ 引入了单独的 std::latch 和 std::barrier?

c++ - 您可以在 Windows 可执行文件中执行逻辑的最后一个地方是什么?