0

所以我正在为我的计算机科学课程做作业,我们必须采用用 C 语言编写的算法并在汇编中复制它 (SPARC)。我的问题是我对 C 代码知之甚少,因为我专攻 java。谁能帮我看看这段代码并给我它的Java等价物?如果你们对直接将它用于 SPARC 有任何提示,我也对这些想法持开放态度。谢谢!

neg = multiplier >= 0 ? 0 : 1;
product = 0;
for (i = 32; --i >= 0; ) {
    if (multiplier & 1)
        product += multiplicand;
    (product and multiplier registers) >> 1;
}
if (neg)
    product -= multiplicand;
4

3 回答 3

1

C 的语法非常接近 Java 的语法。特别是关于这个剪断,所以你不应该有任何理解它的麻烦。

无论如何,我认为C 中不存在“and” 。

你确定还是你的片段?

这段代码你不明白什么?

于 2011-10-11T08:03:20.170 回答
0

在那段代码中,只有一个概念与 Java 不同:

纯C没有boolean。因此,如果表达式返回的不是零,那么每个比较都是真的。我在代码中看到两个重要的地方。

哦,and在 C 中也不知道。你确定它是纯C吗?这也不是 C:

(product and multiplier registers) >> 1;

我认为这意味着:

product >>= 1;     // or >>>=, depends on signed/unsigned
multiplier >>= 1;  // or >>>=, depends on signed/unsigned

如果您了解 Java,那么理解这些提示的含义应该没有问题。

于 2011-10-11T08:07:02.037 回答
0

这是一个自己实现乘法的代码(尽管给定的代码是错误的),而不使用*运算符。看到这个片段,

int multiplier, multiplicand,product=0;

/*Assume multiplier and multiplicand have their values*/

for(int i= multiplier;i>0;i--)
{
product+=multiplicand;
} 

现在自己编写代码来处理负数。(希望现在您知道代码的作用)。neg您的代码中应该检查乘数是否为负,但仅检查乘数效率不高,您应该同时检查multipliermultiplicand

于 2011-10-11T08:14:49.780 回答