биты для умножения на любое число

, используя только добавление, вычитание и биты, как я могу умножить целое число по данному номеру?

Например, я хочу умножить целое число на 17.

Я знаю, что изменение слева умножается на множественное из 2 и сдвигаемое направо делятся на мощность 2, но я не знаю, как обобрать это.


Как насчет негативных чисел? Преобразуйте в дополнение к двум и сделайте одну и ту же процедуру?

( Обратите внимание: Хорошо, я получил это, не преобразование. Вы преобразуете в дополнение к двум дополнениям, а затем вы переживаете в соответствии с номером слева направо вместо Право налево.)


Теперь приходит сложная часть. Мы можем использовать только 3 оператора.

Например, умножение на 60 я могу сделать, используя это:

(x << 5) + (x << 4) + (x << 3) + (x << 2)

где x - это число, которое я умножую. Но это 7 операторов - как я могу консервировать это использовать только 3?

8
задан Bill the Lizard 19 September 2012 в 11:24
поделиться