2011-07-02 15 views
5

Rozwiązałem problem w Projekcie Euler, ale trwało to około 4 minuty, czyli powyżej zalecanego czasu, więc przeglądałem różne rozwiązania na forum. Jeden z nich zawierał w zrozumieniu listy symbol <<. Jest to wyglądałoCo robi << w Pythonie?

blist.extend([(i << 1) + 3 for i in range(num) if alist.get(i)]) 

nie mogę nigdzie znaleźć dokładnie to, co robi << symbol. Czy ktoś może mi pomóc?

+2

http://docs.python.org/library/operator.html#mapping-operators-to -functions – Trufa

Odpowiedz

10

Jest to bit shift operator (Python docs) i jest powszechne wśród wielu języków programowania, takich jak C, Java, PHP, itp Zgodnie z docs Pythona:

przesunąć je pierwszy argument w lewo lub w prawo o liczbę bitów podaną przez drugi argument.

Przesunięcie w prawo o n bitów jest zdefiniowane jako podział na przez pow (2, n). Lewe przesunięcie o n bitów jest zdefiniowane jako mnożenie z pow (2, n). Przesunięcie ujemne ma wartość podnosząc wyjątek ValueError.

więc w konkretnym przypadku, i << 1 oznacza przesunięcie w lewo o 1 bit, który jest odpowiednikiem pomnożenie przez 2^1, lub po prostu 2.

+0

, więc jeśli jest i >> 1 byłby to mod (i, 2), czy przesunąłby się w prawo po przecinku? – gtmanfred

+0

Prawe przesunięcie jest dzielone przez 2^n, lub w przypadku, gdy cytowałeś, tylko 2. Poza tym, myślę, że to po prostu podział liczb całkowitych, więc nie sądzę, że otrzymasz wartości dziesiętne ... –

+0

prawda, to co miałem na myśli, nie wiem, dlaczego powiedziałem mod. Dzięki – gtmanfred

1

To binarny operator zmiany binarnej.

x << n 
x shifted left by n bits 

x >> n 
x shifted right by n bits