2011-07-02 19 views
5

나는 프로젝트 오일러에 관한 문제를 해결했지만, 실행하는데 약 4 분이 걸렸는데, 이는 권장 시간보다 길기 때문에 포럼에서 다른 솔루션을 조사하고있었습니다. 그들 중 하나는 목록 이해에 기호 <<을 포함 시켰습니다. 이 모양은 무엇입니까<<는 파이썬에서 무엇을합니까?

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

정확히 << 기호는 어디에서나 찾을 수 없습니다. 누군가 나를 도울 수 있습니까?

+2

http://docs.python.org/library/operator.html#mapping-operators-to 의해 I 승산, 1 스텝만큼 왼쪽으로 난의 비트를 모두 시프트 -functions – Trufa

답변

10

그것은 파이썬 문서에 따르면 bit shift operator (Python docs), 그리고 등 C, 자바, PHP, 많은 프로그래밍 언어들 사이에서 일반적입니다 :

그들은이 왼쪽으로 첫 번째 인수를 이동 또는 두 번째 인수로 주어진 비트 수 에 의해 오른쪽으로.

n 비트의 오른쪽 시프트는 pow (2, n)에 의한 나누기로 정의됩니다. n 비트만큼 왼쪽 쉬프트는 pow (2, n)을 갖는 의 곱셈으로 정의됩니다. 음수 시프트 수 은 ValueError 예외를 발생시킵니다.

그래서 특정 경우 i << 1 2^1 또는 왼쪽 시프트 연산자 그냥 2

+0

그러면 mod >> (1, 2)이 될 것인가 아니면 10 진수를 지나서 오른쪽으로 이동하겠습니까? – gtmanfred

+0

오른쪽 시프트는 2^n으로 나누거나, 인용 한 경우에 단지 2. 내 머리 꼭대기에서 정수형으로 너무 작다고 생각합니다. 그래서 소수 값을 얻지는 않을 것입니다 ... –

+0

그게 내가 의미하는 바로는, 왜 내가 mod라고 말했는지 모르겠다. 감사 – gtmanfred

1

이진 비트 시프트 연산자입니다.

x << n 
x shifted left by n bits 

x >> n 
x shifted right by n bits