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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • rknntoolkitlite2环境搭建
  • 回归预测 | Matlab实现GWO-BP-Adaboost灰狼算法优化BP神经网络集成学习多输入单输出回归预测
  • 全志Linux磁盘操作基础命令
  • AcWing算法基础课-785快速排序-Java题解
  • webSocket的自学案例
  • 【类模板】类模板的模板参数
  • python办公自动化:PPT工具之`Python-PPTX`简介
  • 【代码随想录训练营第42期 Day48打卡 - 单调栈 - LeetCode 739. 每日温度 496.下一个更大元素 I 503.下一个更大元素II
  • 力扣SQL仅数据库(1068~1084)
  • centos 7部署nacos 2.4.1版本单点方式
  • 人该怎样活着呢?48
  • 深度学习-OpenCV运用(3)
  • 代码随想录算法训练营第三十四天| 62.不同路径 63. 不同路径 II
  • Gnome Encfs Manager简介
  • 通过 GitHub Actions 执行数据库 Schema 变更工作流
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • AngularJS指令开发(1)——参数详解
  • E-HPC支持多队列管理和自动伸缩
  • EventListener原理
  • JavaScript函数式编程(一)
  • js递归,无限分级树形折叠菜单
  • Logstash 参考指南(目录)
  • spark本地环境的搭建到运行第一个spark程序
  • Terraform入门 - 1. 安装Terraform
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 理解在java “”i=i++;”所发生的事情
  • 思否第一天
  • 通信类
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 如何正确理解,内页权重高于首页?
  • ​水经微图Web1.5.0版即将上线
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (十一)手动添加用户和文件的特殊权限
  • (五)MySQL的备份及恢复
  • (转)http协议
  • *2 echo、printf、mkdir命令的应用
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .net的socket示例
  • .NET应用UI框架DevExpress XAF v24.1 - 可用性进一步增强
  • .vimrc 配置项
  • [5] CUDA线程调用与存储器架构
  • [AX]AX2012 SSRS报表Drill through action
  • [BJDCTF2020]The mystery of ip1
  • [BUUCTF 2018]Online Tool(特详解)
  • [BZOJ 4034][HAOI2015]T2 [树链剖分]
  • [bzoj1324]Exca王者之剑_最小割