Ich habe mir ein Meta-Video von PragProg angesehen, und Dave Thomas hat diesen Codeschnipsel gezeigt:
%Vor% Jetzt verstehe ich, was hier vor sich geht, aber ich weiß nicht, was genau mit dem (num & 1)
-Teil der Math.is_even?
-Klassenmethode passiert. Ich weiß, es ist eine bitweise Operation, aber das ist es. Kann mir jemand erklären, was mit dieser Codezeile passiert? Danke.
&
ist ein bitweiser UND-Operator. Doing (num & 1)
überprüft, ob das letzte Bit (niedrigstwertige Bit) der Nummer gesetzt ist. Wenn es gesetzt ist, ist die Zahl ungerade, und wenn es nicht gesetzt ist, ist es gerade.
Es ist nur ein schneller Weg, um zu überprüfen, ob eine Zahl gerade oder ungerade ist.
Sie können hier eine Liste der rubinweisen bitweisen Operatoren sehen: Ссылка
Es ist ein kleiner Trick: Jede Binärzahl, die das niedrigstwertige Bit zu 0 hat, ist sonst gerade und ungerade. Dies, weil die Zweierpotenzen 1,2,4,8,16,...
sind. Was passiert, ist, dass wenn du bitweise AND mit 1 machst, du 0 erhältst, wenn das am wenigsten signifikante Bit 0 und 1 ist. So können Sie leicht erkennen, wenn eine Zahl, wenn Sie das tun.
Natürlich funktioniert das nur, weil die in CPUs verwendete Arithmetik binär ist, sonst wäre es nur Mist.
nur ein Beispiel
%Vor%umgekehrt
%Vor% x & y
ist eine Zahl, bei der für alle i
das i
th Bit 1 ist und nur dann, wenn das i
th Bit von x
und das i
th Bit von y
1 sind und 0 sonst.
Da 1
die Zahl ist, bei der nur das letzte Bit 1 ist, ist x & 1
1, wenn das letzte Bit von x
1 ist und andernfalls 0.
Da das letzte Bit einer Zahl 1 ist, wenn es ungerade ist, und 0, wenn es gerade ist, ist die Überprüfung, ob x&1
0 ist, äquivalent zur Überprüfung, ob eine Zahl gerade ist.
Tags und Links ruby bitwise-operators