2017-02-22 5 views
-1

Ein Stück c bitweise ++ Code, den ich lesen will, istmathematische Gleichung äquivalente Operation

int x = 10; 
int r = 5; 

auto bb = x << (r & 0x1); 

wo bb liest 20. Ich verstehe, wie bitweise Operation funktioniert, aber ich habe Schwierigkeiten seine mathematischen Logik zu erklären, sagen wir, den Einsatz traditionelle mathematische Gleichung, um oben zu erklären. Zum Beispiel bedeutet < < Verschiebung. Also x < < n könnte x^n sein? Was bedeutet dann & hier?

+0

& wird als "bitweises und" bezeichnet.die Berechnung im Detail: 'x = 0b1010; r = 0b0101'. Jetzt bin 'r & 0x1 = 0b0101 & 0b0001 = 1' und dann 'x << 1 = 0b1010 << 1 = 0b10100 = 1 * 16 + 0 * 8 + 1 * 4 + 0 * 2 + 0 * 1 = 20'. siehe zum Beispiel http://www.learncpp.com/cpp-tutorial/38-bitwise-operators/ – kritzikratzi

+0

ps. 'x << n' ist NICHT' x^n'. (Randnotiz: Bei der Programmierung ist der Hut '^' normalerweise ein Bit xor, nicht die mathematische Potenz). Wie auch immer, du kannst das Verschieben nur zur Bildung von positiven Zweierpotenzen benutzen, im allgemeinen: '1 << x = pow (2, x)'. ein paar Beispiele: '1 << 0 = pow (2,0) = 1;' '1 << 1 = pow (2,1) = 2;' '1 << 2 = pow (2,2) = 4 ' – kritzikratzi

Antwort

3

Diese Gleichung führt Folgendes aus:

(r & 0x1) prüft, ob oddity von R, Beispiel:

r = 5 -> 00000101 in bits 
0x1 -> 00000001 in bits 

r & 0x1->00000001 since its only 1 if both bits are one. 

so dass diese Zeitergebnisse in 1, wenn R ungerade ist, und 0, wenn R gerade ist.

Jetzt verschieben wir mit diesem Wert (entweder 1 oder 0) nach links.

n << 0/1 

n = 10: 00001010 
n << 1 00010100 

so wird dieser Begriff (Shift links) verdoppelt, wenn r ungerade ist, erklärt das Ergebnis

2

r & 0x1 ist ein bitweises UND zwischen r und 1. Dies entspricht im Wesentlichen der Überprüfung, ob r gerade oder ungerade ist.

Die Anweisung führt eine Bitverschiebung von 1 durch, wenn r ungerade ist oder nichts (Bitverschiebung von 0), wenn r gerade ist. Die linke Verschiebung einer ganzen Zahl um n entspricht der Multiplikation mit 2^n. In diesem Fall verdoppelt sich die x, wenn r ungerade ist.

2

& die bitweise und-Operator

r & 0x1 Ergebnisse in 1, wenn das letzte Bit gesetzt ist (das heißt, wenn R ungerade ist), und in 0, wenn das letzte Bit ist nicht gesetzt (R ist gerade).

Die Verschiebung nach links um n entspricht einer Multiplikation mit 2^n.

als R = 5 ungerade ist die Linksverschiebung um 1 perfomed wird, in 10 resultierende * (2^1) = 20

2
auto bb = x << (r & 0x1); 

kann als auf Englisch übersetzt werden:

Wenn r ungerade ist, initialisieren bb zu x * 2.
Wenn r gerade ist, initialisieren Sie bb zu x.

r & 0x1 ist 1 wenn r ungerade ist und 0 wenn r gerade ist.

x << 1 entspricht x * 2.
x << 0 entspricht x.

+0

Sehr einfache Antwort! Mit der Erklärung von jonas_toth verstehe ich jetzt den bitweisen Betrieb! – Kyle

+0

@Kyle, froh, dass ich Ihnen geholfen habe, bitweise Operationen ein bisschen besser zu verstehen. –

Verwandte Themen