c - 在进行 64 位无符号整数除法时如何管理 65 位分配?
问题描述
我现在在 32 位机器上实现 64 位无符号整数除法。
我可以用 64 位无符号整数表示
struct {
unsigned int a,
unsigned int b
}
我正在尝试通过恢复算法来实现这一点。
https://www.geeksforgeeks.org/restoreing-division-algorithm-unsigned-integer/
我必须为累加器和 M 存储 65 位,但是我该如何管理这个..?
解决方案
尽管您链接到的文章似乎显示每个使用五位M
并且A
当被除数宽度为四位时,它未能明确说明使用什么宽度或为什么。尽管如此,作为单个寄存器的移位A
可以Q
很容易地完成:
- 识别 Q 的最高位。
- 将 A 左移一位并插入 Q 的最高位作为 A 的低位。
- 将 Q 左移一位,让最高位移出(并丢失)。
A
如果在使用 32 位基本宽度时它是 33 位,则对 使用33 位移位,对 使用 32 位移位Q
。不需要 65 位移位或寄存器。
推荐阅读
- ios - 错误域 = NSCocoaErrorDomain 代码 = 3840 “无值。” UserInfo={NSDebugDescription=No value.} 图片上传
- java - 在较高版本中运行 java 代码,在较低 java 版本中编译
- perl - 使用 perl 从 sql join 获取结果
- abap - 检查表 Y 中是否存在列 X
- javascript - 如何附加到按 ID 过滤的 IndexedDB 中的数组?
- amazon-web-services - AWS EC2 无法通过 SSH 连接到 Elastic Beanstalk 创建的 EC2
- angular5 - 如何在 Angular TypeScript 中使用 ACE 编辑器突出显示每一行?
- c++ - 列表需要类类型
- javascript - 获取具有相同类但带有过滤器的 div 的内部文本
- rxjs - RxJS:forkJoin 合并映射