Перевод простого кода C - PullRequest
       42

Перевод простого кода C

0 голосов
/ 11 октября 2011

Итак, я работаю над заданием для моего курса по информатике. Мы должны взять алгоритм, написанный на 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;

Ответы [ 3 ]

1 голос
/ 11 октября 2011

Синтаксис C действительно близок к синтаксису Java. Особенно в связи с этим, чтобы у вас не было проблем с пониманием.

Во всяком случае, я не думаю, что "и" существуют в C.

Вы уверены или ваш фрагмент?

Что вы не понимаете в этом коде?

0 голосов
/ 11 октября 2011

Это код для реализации умножения (хотя данный код неверен) самостоятельно, без использования оператора *.Посмотрите этот фрагмент,

int multiplier, multiplicand,product=0;

/*Assume multiplier and multiplicand have their values*/

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

Теперь закодируйте себя для обработки отрицательных чисел (надеюсь, что теперь вы знаете, что делает код). neg в вашем коде должен проверять, является ли множитель отрицательнымно неэффективно проверять только множитель, вы должны проверить и multiplier, и multiplicand.

0 голосов
/ 11 октября 2011

В этом фрагменте кода есть только одна концепция, которая отличается от Java:

Чистый С не имеет boolean. Таким образом, каждое сравнение истинно, если выражение возвращает что-то еще, кроме нуля. Я вижу два места в коде, где это имеет значение.

О, and также неизвестно в Си. Вы уверены, что это чистый C? Кроме того, этот, безусловно, не C:

(product and multiplier registers) >> 1;

Я предполагаю, что это означает:

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

Если вы знаете Java, не должно быть проблем с пониманием того, что происходит с этими подсказками.

...