检查无符号二进制数是否可被 15 整除

电器工程 数字逻辑 逻辑门 加法器 二进制 在家工作
2022-01-24 23:30:17

我是一名计算机科学专业的学生,​​我在这个问题上纠结了好几个小时。

我们有一个二进制无符号数 X,用 12 位表示。我们想构建一个具有 1 位输出的系统 - Y,如果 X 除以 15 而没有余数,则该系统将为“1”。

我们可以使用的唯一组件是:

  • 4位加法器,还有C0(进位)作为输入,C4作为输出。
  • 1 个带 3 个输入的单或非门。

在此处输入图像描述

我确实找到了一个模式。如果我为 0<=i<=11 计算 2^i % 15(因为它是 12 位),那么我将得到一个序列 1248 1248 1248。

如果我有 0001 1110 1111 那么我可以将所有数字相乘,将它们相加,然后检查我的数字是否可以被 15 整除。

0 + 0 + 0 + 8 + 1 + 2 + 4 + 0 + 1 + 2 + 4 + 8 = 30

问题是,我不知道如何实现它,以及它是否有效。

我很想得到一些帮助。

3个回答

你知道如何检查以 10 为底的 9 的可分性吗?

使用以 10 为底的算术添加所有数字。如果结果有多个数字,请重复该过程。当你有一个数字时停止。如果数字是 9,则原始数字可以被 9 整除。这是因为被测试的除数是 base-1。例如 45 可以被 9 整除,并且数字之和为 9,两位数只需要一个加法器。999也是,三位数字需要两个加法器。

那么,当您手头有以 16 为基数的算术工具时,您是否知道如何测试可被 15 整除?

该技术类似于检查一个数字在十进制中是否能被 9 整除。我们需要将数字分成四位数字,然后将这些数字重复相加,直到剩下一个数字。

让我们称数字XYZ

c1,r1 = X + Y
c2,r2 = Z + r1 + c1
c3,r3 = r2 + 1

如果 X,Y,Z 可以被 15 整除,则 c2,r2 也可以被 15 整除。此外,c2,r2 小于 0x1e。因此,如果 r=15 则原始数字可被 15 整除。我们通过加一并查看结果进位标志来测试 r 是否等于 15。

令我困惑的是,nor门应该是什么。

完整答案:

正如@Neil_UK 所说,我有 12 位,如果我想检查该数字是否可被 15 整除,我将取 12 位,并将它们视为以 16 为基数的 3 个数字。

我将三个数字加在一起,同时总是将进位加到下一个加法器中。

将它们全部添加后,我会得到一些数字。正如我所说,我们想看看这个数字是否能被 15 整除,因为这些数字是以 16 为底的,所以如果结果是 15 - 这个数字能被 15 整除。

如果那个数字是 15,二进制1111,所以如果我1加到1111,我会得到进位10000

如果那个数字是 0,二进制0000,所以如果我1加到0000,我会得到0001

这就是 NOR 发挥作用的地方。

如果最后 3 位数字为 0,则该数字可被 15 整除。

电路:

在此处输入图像描述

例如:

1111 1111 1111

  • 1111+ 1111+ 1= 携带11111
  • 1111 + 1111+ 进位1= 进位11111
  • 1111+ 进位1= 进位10000
  • NOR(0,0,0)=真

0001 1001 0101: (405):

  • 0101+ 1001+ 1=1111
  • 1111+ 0001= 进位10000
  • 0000+ 携带1=0001
  • NOR(0,0,0)=真