0

そこで、コンピューター サイエンス コースの課題に取り組んでいます。C で記述されたアルゴリズムを使用して、それをアセンブリ (SPARC) で複製する必要があります。私の問題は、Java を専門としているため、C コードをほとんど知らないことです。このコードを見て、それに相当する 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 の構文に非常に近いです。特にこれに関しては省略されているので、理解に苦しむことはないはずです。

とにかく、 「and」はCには存在しないと思います。

よろしいですか、それともあなたのスニペットですか?

このコードでわからないことは何ですか?

于 2011-10-11T08:03:20.170 に答える
0

そのコードには、Javaで異なる概念が1つだけあります。

純粋なCにはありませんboolean。したがって、式がゼロ以外のものを返す場合、すべての比較は真です。これが重要なコードの2つの場所があります。

ああ、andCでも知られていない。純粋な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思います)。コード内の は、乗数が負かどうかをチェックすることになっていますが、乗数のみをチェックするのは効率的ではありません。 と の両方をチェックする必要がmultiplierありmultiplicandます。

于 2011-10-11T08:14:49.780 に答える