Возникли проблемы с домашней работой, программированием на C - PullRequest
1 голос
/ 21 сентября 2010

Таким образом, проблема состоит в том, чтобы сложить 3 числа (2 дополнения) в C. Обычно это должно быть очень просто, но сложная часть этой проблемы заключается в том, что вы можете использовать только операции! ~ & ^ | << >>, никаких циклов, вызовов функций или чего-то необычного. Просто эти операции. Он дает нам функцию, которая добавляет 2 слова вместе. Возвращаемая функция, которую я пишу (sum3) - это возвращаемая сумма (word1, word2). Моя обязанность состоит в том, чтобы определить, что нужно установить для word1 и word2, чтобы вызов функции sum дал мне правильный ответ. О, а также я могу использовать только 16 таких операций там.

Я попытался установить для word1 значение x ^ y и для word2 значение (x & y) << 1, чтобы проверить, получил ли я хотя бы правильный ответ на этот вопрос для первых 2 чисел, и он всегда заканчивается правильным. Тем не менее, я понятия не имею, как бросить z в микс, не испортив все. Я думаю, что это самая большая проблема ... кто-то, пожалуйста, помогите, я все испортил и не понял, что это должно было произойти через 5 часов, так что я волнуюсь. По крайней мере, хороший намек ... что-то, что угодно. </p>

1 Ответ

3 голосов
/ 21 сентября 2010

Просто подсказка: a + b == (a ^ b) + ((a & b) << 1).Здесь a & b - выражение для переноса.

Как видите, с помощью этого преобразования вы уменьшаете добавление N битов к некоторым логическим операциям и добавление N-1 битов.Если задано N, вы можете вручную развернуть цикл, и весь результат будет содержать только XOR, AND и SHL (1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...