news 2026/9/3 13:40:43

64 位/32 位除法和取模的通用 C 版本,具有 64 位结果和 32 位余数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
64 位/32 位除法和取模的通用 C 版本,具有 64 位结果和 32 位余数

对于32bit平台进行64bit的除法操作时,不能直接计算。需要使用专门的除法操作相关函数,下面的参考链接有64bit除法的相关算法,是基于div64.h中的do_div(n, base)实现的。

一.以下是错误示例

uint64 a,b; uint32 c; a = a/c; a = a/b; int64 ia,ib; int32 ic; a = ia/ic; a = ia/ib;

二.以下是linux lib/math/div64.c的函数相关注释,可供参考。[1][2]

//一 @note 无符号64位被除数➗无符号32位除数=(无符号32位商+无符号32位余数) @parameter uint64_t *n 传入无符号被除数,函数运行存放无符号商。 @parameter uint32_t base 无符号除数。 @return uint32_t 无符号余数。 uint32_t __attribute__((weak)) __div64_32(uint64_t *n, uint32_t base) //二 @note 有符号64位被除数➗有符号64位除数=(有符号64位商+有符号64位余数) @parameter s64 dividend 有符号被除数。 @parameter s64 divisor 有符号除数。 @parameter s64 *remainder 有符号余数的指针。 @return s64,有符号商。 s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder) //三 @note 无符号64位被除数➗无符号64位除数=(无符号64位商+无符号64位余数) @parameter u64 dividend 无符号被除数。 @parameter u64 divisor 无符号除数。 @parameter u64 *remainder 无符号余数的指针。 @return u64,无符号商。 u64 div64_u64_rem(u64 dividend, u64 divisor, u64 *remainder) //四 @note 无符号64位被除数➗无符号64位除数=(无符号64位商+无符号64位余数) @parameter u64 dividend 无符号被除数。 @parameter u64 divisor 无符号除数。 @return u64,无符号商。 u64 div64_u64(u64 dividend, u64 divisor) //五 @note 有符号64位被除数➗有符号64位除数=(有符号64位商+有符号64位余数) @parameter s64 dividend 有符号被除数。 @parameter s64 divisor 有符号除数。 @return s64,有符号商。 s64 div64_s64(s64 dividend, s64 divisor)

reference:

[1]

div64.c - lib/math/div64.c - Linux source code (v6.7.9) - Bootlin

Elixir Cross Referencer - Explore source code in your browser - Particularly useful for the Linux kernel and other low-level projects in C/C++ (bootloaders, C libraries...)

https://elixir.bootlin.com/linux/latest/source/lib/math/div64.c#L102

[2]

math64.h - include/linux/math64.h - Linux source code (v6.7.9) - Bootlin

Elixir Cross Referencer - Explore source code in your browser - Particularly useful for the Linux kernel and other low-level projects in C/C++ (bootloaders, C libraries...)

https://elixir.bootlin.com/linux/latest/source/include/linux/math64.h

Disclaimer / 免责声明:
本文仅代表作者在撰写和修改时的个人观点,不代表当前或未来立场。文中观点和内容未经学术机构或标准组织验证,作者不对其准确性、完整性或可靠性作任何保证。请读者仅供参考,并自行核实相关信息。本文旨在探索与经验分享,因篇幅及作者水平所限,难免存在疏漏,欢迎批评指正。如有问题或交流建议,请联系:flourishinggarden@outlook.com。

copyright / 版权声明:

本文为作者原创。引用或转载需注明“转自或引用自 flourishinggarden@outlook.com”。 未经注明来源的擅自使用、抄袭或传播行为均被禁止。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 13:40:42

Python类设计:提升代码可读性的命名、结构与文档实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 13:40:32

奢侈品小程序电商系统架构与高并发抢购实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 13:39:11

基于 TI DSP28335 和 CCS9 ——点亮LED教程(超详细图文教程!)

点亮LED教程 —— 基于 TI DSP28335 和 CCS9(超详细图文教程)一、前言本文介绍如何使用 TI 的 DSP28335 开发板通过 CCS9 创建一个简单工程,实现点亮板载 LED 的功能。 涵盖项目创建、代码结构、工程目录组织、库文件添加及程序调试流程&…

作者头像 李华
网站建设 2026/9/3 13:32:43

SQLBot数据源备注导入:智能问数准确率提升的关键实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华