答えて
。現代版のPythonは可変長整数を持ち、従来の知恵は適用されません。大きな数字をシフトすることは安くはありません。シフト1は安いです。いくつかの-mtimeit入力とそれに対応する出力があります。 not not(foo)
フリークあなたを、またはあなたが本当に代わりbool
のint
答えは、あなたが1 if foo else 0
を使用することができますしたい場合は、最初は
windows command prompt>\python27\python -mtimeit -s"a=10**20;n=3" "(a>>n)&1"
1000000 loops, best of 3: 0.238 usec per loop
-s"a=10**20;n=3" "(a>>n)&1"
0.238 usec
-s"a=10**20;n=3" "not not(a & (1 << n))"
0.154 usec
-s"a=10**200;n=3" "(a>>n)&1"
0.382 usec
-s"a=10**200;n=3" "not not(a & (1 << n))"
0.155 usec
-s"a=10**10;n=3" "(a>>n)&1"
0.231 usec
-s"a=10**10;n=3" "not not(a & (1 << n))"
0.156 usec
-s"a=10**9;n=3" "(a>>n)&1"
0.0801 usec
-s"a=10**9;n=3" "not not(a & (1 << n))"
0.0938 usec
-s"a=2**1000;n=64" "(a>>n)&1"
0.446 usec
-s"a=2**1000;n=64" "not not(a & (1 << n))"
0.255 usec
の略語です。わずかに遅いです。
良い観察。記録のために、Python 3.1では 'long'と' int'を区別していますが、まっすぐなアプローチも(少なくとも私のマシンでは)最も速いです。 –
@SvenMarnach:私は2.7,3.1、そして3.2で似たような結果を得ています...今晩完全な評価を行います。今すぐ急ぐ必要があります... –
私のマシン上のタイミング[https://gist.github.com/1839351]は、私の前のコメントが示唆しているものよりも本当に差別化されています。 (私は前にあなたのテストの一部しかやっておらず、まっすぐなアプローチが速いものを打ちました。) –
シフト最後の位置にビットを(私はCのpluggin、単なるPythonのを書きたくない)他のeverthingマスクアウト:
bit = (a >> n) & 1
これは、ビットは、通常でインデックス化されていることを前提とし方法は、最下位ビット、すなわち、あるビット0
編集:私はこれは、Pythonのバージョンでそれを行うには最速方法があるかどうかわからないんだけど、少なくともそれが最も直です前方へ。 Pythonのバージョンと特定の値a
とn
に応じて、answer by John Machinに示すように、より高速な方法があるかもしれません。
-1「大」と「比較的小さい」の定義のなかで、これが最も速い方法であるという印象を与えますか? –
@ジョンマーチン:私は、この質問と、OPによる他の質問から、ユーザーがその方法を全く知らなかったことを知ることができました。質問の私の解釈は、 "最も速い"だけでなく、 "最も簡単な"または "最高の"何かをすることができます。そのような場合、私は助けになり、非常に基本的なことを説明しようとします。この回答が役に立たないと本当に思っているのであれば、あなたの有益性の概念は私のものとは非常に異なると受け入れなければなりません。 (私はあなたの答えと質問を読むあなたの方法は完全に有効であると思う) –
答えを編集するまで(おそらく "最速"の定義を説明するために)、投票を取り除くことはできません。 –
使用nは0から始まる:あなたは、おそらくのPythonの現代版を使用して、最速道を尋ね
(a >> n) & 1
この回答は、@SvenMarnachの同等で詳細なものより1分遅れて与えられました。私はそれを取り除くことを提案する。 – texnic
- 1. 正の整数nのバイナリ表現の何ビット目か。
- 2. プロットとNの精度[
- 3. Javaの4倍精度浮動小数点(128ビット)番号の扱い
- 4. n番目の項目
- 5. 目的c暗黙の変換で整数精度 'NSUInteger'が失われる
- 6. ビジュアルスタジオで64ビットの倍精度をバイト配列形式の80ビット倍精度に変換する
- 7. リンクリストの印刷は、すべてのn番目の整数方法
- 8. n番目の子と
- 9. 文字列から整数へのハッシュ関数の精度
- 10. シーケンスのn番目の要素を取得する
- 11. C++でテキストファイルのn番目の行を取得する
- 12. ナンシー8倍精度浮動小数点数と128ビット整数。なぜ、どのように?
- 13. 2つの整数を使って倍精度整数の整数部分を表現する方法
- 14. Excel MATCH + COUNTIF関数:配列のn番目の値を取得する
- 15. Nビットのラップアラウンドを伴う整数減算
- 16. mysqlでnビットの符号なし整数を表す
- 17. バッファからn番目のビットを削除し、残りの部分をシフト
- 18. タプルからN番目の型を取得するには?
- 19. SelectListからN番目のアイテムを取得する
- 20. twitterでN番目のツイートを取得するAPI
- 21. Cビットフィールドは、(おそらく精度ビット)
- 22. 任意の固定精度整数のプログラミング言語?
- 23. C++で整数と倍精度の書式設定の行列
- 24. 配列内のn番目のアイテムを取得
- 25. 関数でn番目の要素にクラスを追加する
- 26. piからn番目の数字を生成するJava
- 27. IEEEの単精度と倍精度で表される総数
- 28. プレビュー用にビデオからn番目のフレームを取得
- 29. IntelおよびAMDアーキテクチャで32ビット整数を倍精度に変換するコストはいくらですか?
- 30. 倍精度SSE2レジスタに64ビット整数をロードする最も良い方法は?
大きさはどれくらい大きいですか? –
@ JohnMachin: 'a'は約1000桁、' n'は約1000です。 – Randomblue