2011-10-11 176 views
0

因此,我正在为我的计算机科学课程进行作业,我们必须采用用C语言编写的算法,并将其复制到程序集(SPARC)中。我的问题是我知道很少的C代码,因为我专精于Java。任何人都可以帮我看看这段代码,并给我它的Java相当于?如果你们有直接使用SPARC的技巧,我也会接受这些想法。谢谢!翻译简单的C代码

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; 
+1

是不是更容易学习你还不知道的2-3个操作符,并直接将其翻译为程序集?此外,你不应该总是试图把所有事情都映射到高层次,试图扩展你的知识:)另外,告诉我们你不明白哪一个操作符。 – duedl0r

+0

我学会了操作符,但它仍然有点混淆解释什么代码正在做它 – AlbChu

+2

缺乏C的知识不应该是完成这项任务的问题。如果你是CS学生,这段代码中使用的原语应该是众所周知的。 – erlando

回答

0

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

int multiplier, multiplicand,product=0; 

/*Assume multiplier and multiplicand have their values*/ 

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

现在自己编写代码来处理负数。(希望,现在你知道这段代码的功能)在你的代码.The neg应该检查乘数为负,但其效率不高要只检查乘数,你应该检查multipliermultiplicand

1

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

无论如何,我不认为“和”存在于C.

确定或您的片断?

你在这段代码中不了解什么?

+2

这应该是一个评论,而不是一个答案。 – DarkDust

+0

是的,对不起。 – lc2817

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的应该是没有问题的理解发生了什么事情与这些提示。

+1

如果它不应该是一个问题,那么你可以向我解释什么'(产品和乘法器寄存器)>> 1;'确实是 – duedl0r

+0

它似乎是伪代码。 –

+0

@ duedl0r - 编辑 –