Используя только сложение, вычитание и сдвиг битов, как я могу умножить целое число на данное число?
Например, я хочу умножить целое число на 17.
Я знаю, чтосдвиг влево умножается на кратное 2, а сдвиг вправо делится на степень 2, но я не знаю, как это обобщить.
А как насчет отрицательных чисел?Преобразовать в дополнение к двум и выполнить ту же процедуру?
( РЕДАКТИРОВАТЬ: ОК, я понял, неважно.справа вместо права налево.)
Теперь начинается сложная часть. Мы можем использовать только 3 оператора.
Например, умножение на 60 Iможно выполнить с помощью этого:
(x << 5) + (x << 4) + (x << 3) + (x << 2)
Где x
- это число, которое я умножаю.Но это 7 операторов - как я могу сжать это, чтобы использовать только 3?