回答
你问的最快方式,想必使用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