回答
你問的最快方式,想必使用Python的現代版。現代版本的Python具有可變長度整數,傳統智慧不適用。轉移大量並不便宜。轉移1便宜。這裏有一些-mtimeit輸入和相應的輸出。首先是
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
的縮寫如果not not(foo)
怪胎你出去,或者你真的想要一個int
答案,而不是bool
,你可以使用1 if foo else 0
;它只是稍微慢一些。
不錯的觀察。只是爲了記錄,在Python 3.1中刪除了'long'和'int'的區別,直接的方法也是最快的(至少在我的機器上)。 – 2012-02-15 21:47:50
@SvenMarnach:我用2.7,3.1和3.2得到了類似的結果......我今晚會做一個更全面的評估;必須立即趕走... – 2012-02-15 21:57:33
完成[我的機器上的時間](https://gist.github.com/1839351)確實比我以前的評論暗示的更加有區別。 (我之前只做過一些測試,碰巧碰到那些直接進行得更快的測試。) – 2012-02-15 22:10:53
移位到最後的位置,屏蔽掉寄託都還有:
bit = (a >> n) & 1
這假定位在平時的索引這樣,即至少顯著位爲0位
編輯:我不知道這是否是最快辦法做到這一點在你的Python版本,但至少它是最直前進的方式。根據您的Python版本以及a
和n
的特定值,可能會有更快的方法,如answer by John Machin中所示。
-1什麼讓你覺得這是最快的方式,在「大」和「相對小」的定義下? – 2012-02-15 20:44:21
@JohnMachin:我可以從這個問題和OP的其他問題中看到,用戶根本不知道*如何去做。我對這個問題的解釋是,「最快」也可能是「最簡單」或「最好」等等。在這種情況下,我會盡力幫助並解釋非常基礎。如果你真的認爲這個答案不是有用的,那麼我將不得不接受你的幫助理念與我的非常不同。 (我認爲你的答案和你閱讀這個問題的方式也是完全有效的。) – 2012-02-15 21:30:58
直到你編輯你的答案(或者解釋你的「最快」的定義),我才能刪除投票。 – 2012-02-15 21:50:27
- 1. 獲取雙精度值的小數位
- 2. 我怎樣才能獲得的第n個雙精度數
- 3. 獲取小數位的精確精度從雙在.net 3.5
- 4. 如何獲得小數n位精度在C#程序丕
- 5. 獲取高達Python中的精度n個小數點結果
- 6. 獲取浮點型IEEE單精度位
- 7. 獲取GPS精度
- 8. 獲取第N行的PostgreSQL
- 9. 從字符串數組中獲取第一個雙精度值
- 10. 如何從XML獲取整數/雙精度值
- 11. 調整小數精度,.NET
- 12. mongodb整數索引精度
- 13. SQL SELECT獲取前N個正整數
- 14. 獲取GPS定位精確
- 15. 正則表達式在精度前匹配n位,精度後只有兩位數
- 16. 設置並獲取雙精度數組
- 17. 獲取低階n位
- 18. SQL獲取整數的後兩位數
- 19. 獲取元素相對於第n個父元素的位置
- 20. jQuery:獲取對象的第n個位置
- 21. C:8x8 - > 16位乘以整數升級的精度保證?
- 22. 移位N位整個字符數組
- 23. 如何獲得第n位值
- 24. 標準雙精度IEEE浮點數有多少位的精度?
- 25. 獲取小數位數的長度
- 26. 獲取BST的第n個項目
- 27. 檢查精度到第十個小數位?
- 28. double與整數精度的乘法
- 29. 按位運算從雙精度轉換爲整數?
- 30. 使用CLLocationManager獲取精確的位置
多大? – 2012-02-15 20:42:29
@JohnMachin:'a'大約有1000位數字,'n'大約爲1000. – Randomblue 2012-02-15 22:26:50