Bitverschiebung, um eine ganze Zahl mit 10 zu multiplizieren

7

Einfache Frage, aber ich kann es nicht so recht herausfinden:

Wenn ich eine Ganzzahl habe, sagen wir 12, und führe die folgende Bit-Manipulation aus:

int i = 12;
i = (i << 3) + (i << 1);

Ich habe 120 (12 * 10). Dies ist der Fall mit einer beliebigen Nummer.

Kann mir jemand kurz erklären, warum das so funktioniert? (Ich vermisse offensichtlich etwas ziemlich rudimentäres, wenn es um Bitshifting geht).

Danke

    
Jack Smith 25.05.2012, 16:17
quelle

6 Antworten

17

Express als Multiplikation.

%Vor%     
Puppy 25.05.2012, 16:19
quelle
5

Sie tun im Grunde:

%Vor%     
lezebulon 25.05.2012 16:19
quelle
2

i << 3 entspricht i * 8 . i << 1 entspricht i * 2 .

Die Eigenschaft verteilen sagt uns Folgendes:

%Vor%     
SirPentor 25.05.2012 16:21
quelle
1

Das Verschieben nach links um 3 Stellen ist gleichbedeutend mit dem Multiplizieren mit 8, das Verschieben um 1 Stellen ist gleich dem Multiplizieren mit 2, also machst du

%Vor%     
TheJuice 25.05.2012 16:20
quelle
1

Das Links-Bitshift ist das gleiche (normalerweise) wie das Multiplizieren mit Zweierpotenzen. d. h. << 1 entspricht *(2^1) , << 2 entspricht *(2^2) und so weiter ...

Wenn Sie das in Ihrem Beispiel ersetzen, können Sie sehen, warum Ihr Ergebnis mit 10 multipliziert wird:

%Vor%     
NominSim 25.05.2012 16:24
quelle
0

Schreibe die Bitshift als Multiplikation mit Potenzen von 2, und alles sollte klar werden.

    
Oliver Charlesworth 25.05.2012 16:19
quelle

Tags und Links