微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LC-3 如何存储大于 16 位的数字并将其打印到控制台?

如何解决LC-3 如何存储大于 16 位的数字并将其打印到控制台?

我很难在 LC-3 中存储和显示大于 32767 的数字,因为寄存器只能保存从 -32768 到 32767 的值。对于无法想出算法的任何想法,我深表歉意。请给我一些建议。谢谢!

解决方法

您需要一个表示来将较大的数字存储在一对或更多单词中。

big integers 的存储方式有多种:固定数量的单词,以及可变数量的单词或字节。关键部分是能够检测溢出的存在和数量/进行*10等数学运算。

出于这个原因,一种简单的方法是使用可变数量的字/字节(对于单个数字),并在每个字/字节中仅存储一位十进制数字。这样乘以 10,意味着简单地在末尾添加一个数字(这具有将每个现有数字移动到 10 位的下一个更高次幂的效果)。将这种形式的数字相加也相当容易,我们需要将数字排列起来,然后将它们相加并检测总和何时 >= 10,然后有一个进位(1)要添加到总和的下一个高位数字。 (如果需要添加两个这样的(可变长度)数字,我会以相反的顺序存储十进制数字,因为低位数字已经排列好以供添加。)另见 https://en.wikipedia.org/wiki/Binary-coded_decimal 。 (从某种意义上说,这就像以字符串等形式存储数字,但使用二进制值而不是 ascii 字符。)

为了根据您的需要简化此方法,您可以固定要使用的字数,例如在 7,代表 7 位数字。

(未打包的)二进制编码十进制的一种变体,用于将每个字节打包两个十进制数字。它有点复杂,但可以节省一些存储空间。

另一种方法是在一个单词中存储尽可能多的十进制数字,减去 1。也就是说,如果我们可以将 65536 存储在 16 位中,即只有 4 个完整的十进制数字,这意味着将 3 个数字放在一个时间变成一个词。 9 位数字需要 3 个单词。乘以 10 是指将每个单词在数字上乘以 10,然后检查是否大于 999,如果大于,则将 1 带到下一个更高阶的单词,同时从溢出的单词中减去 10,000。

这种方法需要对每个单词进行实际的乘法和除法 10。

还有其他方法,例如使用一个字中的所有 16 位作为大小,但难以确定溢出量/进位 *10 操作。这不是一项艰巨的任务,但需要工作。例如,参见 https://stackoverflow.com/a/1815371/471129

(如果您还想存储负数,这也是表示的一个问题。我们可以将符号存储为单独称为符号大小的形式(如存储自己的字/字节或打包到最高字节) 或以补码形式存储数字。前者更适用于可变长度的实现,而后者可用于固定长度的实现。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。