2015-11-08 12 views

Odpowiedz

8

<< przesuwa bity pierwszego argumentu n razy po lewej stronie, gdzie n jest drugi argument operacji.

Dlatego 1 << Level przesuwa się pojedynczy 1 bitu liczby 1Level razy w lewo, co jest równoznaczne z obliczenia 2^poziom.

Tak i < 1 << Level jest odpowiednikiem .

3

Krótko mówiąc

for (int i = 0; i < 1 << Level; i++) { 
... 
} 

jest równa

for (int i = 0; i < Math.pow(2,Level); i++) { 
... 
} 

Więc dla pętli potrwa "Math.pow (2 poziom)" razy ponieważ liczą od 0 do Math.pow (2, poziom) -1.

jeśli Poziom = 2, to pętla jest

for(int i =0;i<4;i++){} 

jeśli Poziom = 3, to pętla jest

for(int i =0;i<8;i++){} 

jeśli Poziom = 5 Następnie pętla jest

for(int i =0;i<32;i++){} 
0

W oprócz innych odpowiedzi może pomóc wstawienie nawiasu wokół wyrażenia, jeśli to jest niejasne

for (int i = 0; i < (1 << Level); i++) { 
... 
} 

także od Level jest zmienną zaleca się mieć małą literę tj level chyba że jest to stała, to powinno być LEVEL. I ogólnie uważam, że czytelność> wydajność (jeśli jest to nawet problem?). Tak więc Math.pow(2,Level) jest o wiele łatwiejsze do zrozumienia, jeśli nie jesteś programistą niskiego poziomu, wygląda bardziej jak Java niż C.