在图灵机中将两个二进制数相乘

Multiplicate two binary numbers in turing machine

我正在尝试使用图灵机编写两个二进制数的乘法。我尝试复制乘数,并在每次加法后从中减去 1(例如 110*110 = 110 + 110 // 110 - 001 以及第二次迭代)。 但我认为有一个我找不到的更简单的算法可以做到这一点。 如果它很重要,我使用 this simulator

您可以使用偏移量。 运算110 * 110等于110 * 100 + 110 * 10之和

假设您的实现将参数的长度设置为 3 位;准备结果的 space (最多 6 位)。然后循环一个参数的位,如果它们为 1,则将第二个参数添加到您的结果中,并具有相应的偏移量。

你读了你的第一个参数的第一位,它是0,你什么都不写,你的结果仍然是000000。

你读到第二个位,是1,你把第二个参数加到你的结果上,偏移量是1,所以是110,但是向左写了一位,你的结果是001100.

你看第三位,也是1。您再次将第二个参数添加到结果中,这次偏移量为 2,因此它向左移动两位 110。你的结果变成 001100 + 011000 = 100100.