我正在开发一个允许我将二进制数乘以/除/加/减二的程序。在我的程序中,我将所有整数表示为数字向量。
我已经设法弄清楚如何通过添加来做到这一点,但是乘法让我跌跌撞撞,我想知道是否有人可以给我一些关于如何获取伪代码作为该程序指南的建议。
提前致谢!
编辑:我正在试图弄清楚如何创建乘法算法仍然可以清理。任何有关如何计算此算法的帮助将不胜感激。我通常不使用C ++,所以用它来解决问题需要我更长的时间。
答案 0 :(得分:3)
如果你想成倍增加,你也可以考虑Booth的算法: Booth's multiplication algorithm
答案 1 :(得分:2)
长乘类似于:
vector<digit> x;
vector<digit> y;
total = 0;
multiplier = 1;
for i = x->last -> x->first //start off with the least significant digit of x
total = total + i * y * multiplier
multiplier *= 10;
return total
答案 2 :(得分:0)
您可以尝试模拟binary multiplier或CPU中使用的任何其他电路。
答案 3 :(得分:0)
刚尝试了一些东西,如果你只在二进制中乘以无符号值,这将有效:
unsigned int multiply(unsigned int left, unsigned int right)
{
unsigned long long result = 0; //64 bit result
unsigned int R = right; //32 bit right input
unsigned int M = left; //32 bit left input
while (R > 0)
{
if (R & 1)
{// if Least significant bit exists
result += M; //add by shifted left
}
R >>= 1;
M <<= 1; //next bit
}
/*-- if you want to check for multiplication overflow: --
if ((result >> 32) != 0)
{//if has more than 32 bits
return -1; //multiplication overflow
}*/
return (unsigned int)result;
}
然而,这是在它的二进制级别......我只是有数字向量作为输入
答案 4 :(得分:0)
我制作了这个算法,它使用了我在网上找到的二进制加法函数,并结合了一些代码,这些代码首先调整“移位”数字,然后再将它们发送到一起。 它适用于本视频中的逻辑 https://www.youtube.com/watch?v=umqLvHYeGiI
这是代码:
@Html.ListBoxFor(m => Model.DepDashTaskLists[i].BusinessRuleAnswers, new MultiSelectList(slh.GetRegistrationAnswerLookup(Model.DepDashTaskLists[i].BusinessRuleQuestion1), "Value", "Text", Model.DepDashTaskLists[i].BusinessRuleAnswers), new { @class = "form-control", @id = "RuleQuestionListBoxAnswer_" + @Model.DepDashTaskLists[i].TaskId, @rows = "2", @columns = "40" })