Jak wykonać mnożenie, używając operatorów bitowych?

Pracuję nad problemem, który udało mi się rozwiązać, wszystko poza ostatnim kawałkiem - nie jestem pewien, jak można mnożyć za pomocą operatorów bitowych:

0*8 = 0

1*8 = 8

2*8 = 16 

3*8 = 24 

4*8 = 32

Czy możesz polecić podejście do rozwiązania tego problemu?

Author: JAM, 0000-00-00

1 answers

Aby pomnożyć dowolną wartość 2 do potęgi N (tzn. 2^n) przesuń bity N razy w lewo.

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

Itd..

Aby podzielić przesuń bity w prawo.

Bity są całe 1 lub 0 - nie możesz przesunąć o część bitu, więc jeśli liczba, którą mnożysz przez is, nie uwzględnia całej wartości N ie.

since: 17 = 16  + 1 
thus:  17 = 2^4 + 1

therefore: x * 17 = (x * 16) + x in other words 17 x's  

Aby pomnożyć przez 17 musisz wykonać 4-bitowe przesunięcie w lewo, a następnie dodać liczbę oryginalną znowu:

==> 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 = 2) = 4 bit shift : 0011 0000 = 48

plus the x (0000 0011)

Ie.

    0011 0000  (48)  
+   0000 0011   (3)
=============
    0011 0011  (51)

Edit: Update to original answer. Charles Petzold napisał fantastyczną książkę "Code" , która wyjaśni to wszystko w najprostszy z możliwych sposobów. Gorąco polecam.

 32
Author: Preet Sangha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-07 16:52:06