Для умножения на любое значение от 2 до степени N (то есть 2 ^ N) сдвиньте биты N раз влево.
0000 0001 = 1
times 4 = (2^2 => N = 2) = 2 bit shift : 0000 0100 = 4
times 8 = (2^3 -> N = 3) = 3 bit shift : 0010 0000 = 32
и т.д ..
Чтобы разделить, сдвиньте биты вправо.
Биты целые 1 или 0 - вы не можете сдвинуться на часть бита, поэтому, если число, на которое вы умножаете, не учитывает целое значение N
то есть.
since: 17 = 16 + 1
thus: 17 = 2^4 + 1
therefore: x * 17 = (x * 16) + x in other words 17 x's
, таким образом, чтобы умножить на 17, нужно сделать 4-битный сдвиг влево, а затем снова добавить исходное число:
==> x * 17 = (x * 2^4) + x
==> x * 17 = (x shifted to left by 4 bits) + x
so let x = 3 = 0000 0011
times 16 = (2^4 => N = 4) = 4 bit shift : 0011 0000 = 48
plus the x (0000 0011)
т.
0011 0000 (48)
+ 0000 0011 (3)
=============
0011 0011 (51)
Редактировать: обновить до исходного ответа. Чарльз Петцольд написал фантастическую книгу «Код» , которая объяснит все это и многое другое самым простым способом. Я настоятельно рекомендую это.