首页 > 解决方案 > 在进行 64 位无符号整数除法时如何管理 65 位分配?

问题描述

我现在在 32 位机器上实现 64 位无符号整数除法。

我可以用 64 位无符号整数表示

struct { 
    unsigned int a, 
    unsigned int b
}

我正在尝试通过恢复算法来实现这一点。

https://www.geeksforgeeks.org/restoreing-division-algorithm-unsigned-integer/

我必须为累加器和 M 存储 65 位,但是我该如何管理这个..?

标签: c

解决方案


尽管您链接到的文章似乎显示每个使用五位M并且A当被除数宽度为四位时,它未能明确说明使用什么宽度或为什么。尽管如此,作为单个寄存器的移位A可以Q很容易地完成:

  • 识别 Q 的最高位。
  • 将 A 左移一位并插入 Q 的最高位作为 A 的低位。
  • 将 Q 左移一位,让最高位移出(并丢失)。

A如果在使用 32 位基本宽度时它是 33 位,则对 使用33 位移位,对 使用 32 位移位Q。不需要 65 位移位或寄存器。


推荐阅读