2011-07-02 5 views
5

私はProject Eulerの問題を解決しましたが、実行に約4分かかりました。これは推奨時間を超えていましたので、私はフォーラムでさまざまなソリューションを検討していました。それらのうちの1つは、リストの理解に記号<<を含んでいた。これは見た目です<<はPythonで何をするのですか?

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つのステップだけ左にI内のビットのすべてをシフト-functions – Trufa

答えて

10

それはbit shift operator (Python docs)だし、PythonのドキュメントによるなどCやJava、PHP、など多くのプログラミング言語、の間で共通である:

彼らは 左に最初の引数をシフト第2引数で指定されたビット数( )だけ右に移動します。

nビット右シフトは、 のpow(2、n)での除算として定義されます。 のnビットによる左シフトは、pow(2、n)との乗算 と定義されます。負のシフトカウント は、ValueError例外を発生させます。

は、だからあなたの特定のケースでは、 i << 1は2^1、または左シフト演算子をちょうど2

+0

だから、もし私が>> 1ならmod(i、2)か、それとも10進数の右に動くでしょうか? – gtmanfred

+0

右シフトは2^nで除算されています。引用した場合は2だけです。私の頭の上から外すと、整数の除算にすぎないと思いますので、10進値を取得するとは思いません... –

+0

これは私が何を意味したのか、私はなぜmodと言ったのかわかりません。ありがとう – gtmanfred

1

2進ビットシフト演算子です。

x << n 
x shifted left by n bits 

x >> n 
x shifted right by n bits 
関連する問題