当前位置: 首页 > article >正文

32位CPU中,实现32位无符号乘法,返回64位无符号数据。原理解析。

static inline u64 mul64_32x32(u32 u, u32 v)
{
    uint32_t  u0, v0;   //低16bit部分。
    uint32_t  u1, v1;   //高16bit部分。
    uint32_t  w0, w1, w2, t;//存储计算中间结果。
    uint32_t  x, y;//计算结果高32bit,低32bit。

    u0 = u & 0xFFFF;//取u的低16bit。
    u1 = u >> 16;//取u的高16bit。
    v0 = v & 0xFFFF;//取v的低16bit
    v1 = v >> 16;//取v的高16bit.

    w0 = u0 * v0;//u和v低16bit进行相乘。
    t = u1 * v0 + (w0 >> 16);//u低16bit与v高16bit相乘的结果,加上w0的进位(进位到bit16~bit31)结果。计算的结果为bit16~bit47。
    w1 = t & 0xFFFF;//t的低16bit。也就是bit16~bit31的值。
    w2 = t >> 16;//t的高16bbit,t的进位(进位到bit32~bit47)。
    w1 = u0 * v1 + w1;//更新为低 16 bit与高 16 bit相乘的结果加上之前的 w1。(计算结果为bit16~bit48的结果)。

    //x is high 32 bits, y is low 32 bits

    x = u1 * v1 + w2 + (w1 >> 16);//计算结果的高32bit。(u1*v1


http://www.kler.cn/a/288262.html

相关文章:

  • QTcpSocket 服务端和客户端
  • 认证鉴权框架SpringSecurity-1--概念和原理篇
  • PyQt入门指南五十二 版本控制与协作开发
  • Unity安装后点击登录没反应
  • STM32中,不进行printf改写通过函数达到同款效果
  • 华为路由策略配置
  • oracle expdp/impdp 迁移数据库
  • 数学基础 -- 图像处理之Sobel卷积核推导过程
  • C++STL~~list
  • Day21—爬虫性能优化技巧
  • 自动化仓储系统:知识汇总
  • 将语义分割的标签转换为实例分割(yolo)的标签
  • vim和nano的基础教程(很基础的那种)
  • wordcloud兼figma的词云图片python生成
  • 情感共鸣:数业智能心大陆重塑AI心理交互新纪元
  • Github 2024-09-03 Python开源项目日报 Top10
  • cpu架构:x86和arm
  • 猎板PCB正片与负片工艺:深入解析PCB制造中的光刻技术及其应用
  • 【深度学习 transformer】transformer 训练一个文本分类任务,超简单了
  • 【初出江湖】分布式之什么是分布式存储?
  • 函数式编程(纯函数函数柯里化代码组合)
  • WPF性能优化之UI虚拟化
  • 贪心算法---监控二叉树
  • 综合评价 | 基于层次-熵权-博弈组合法的综合评价模型(Matlab)
  • JavaScript学习文档(12):什么是正则表达式、语法、元字符、修饰符
  • Flask中多app应用怎么完成