我是python的新手。 1 << n
总是优于2 ** n
吗?为什么或者为什么不?
有没有更好的方法来找到2的权力?
答案 0 :(得分:4)
<<
和**
的工作方式几乎相同,可以看到结果,
当值小时,pow
工作得更快,但对于较大的值,它会很慢
In [108]: %timeit pow(2, 2)
10000000 loops, best of 3: 127 ns per loop
In [104]: timeit 1<<2
10000000 loops, best of 3: 23.2 ns per loop
In [105]: timeit 2**2
10000000 loops, best of 3: 24.5 ns per loop
In [111]: %timeit 1<<10
10000000 loops, best of 3: 23.9 ns per loop
In [112]: %timeit 2**10
10000000 loops, best of 3: 23.5 ns per loop
In [113]: %timeit pow(2, 10)
10000000 loops, best of 3: 167 ns per loop
In [114]: %timeit 1<<10000
10000000 loops, best of 3: 23.5 ns per loop
In [115]: %timeit 2**10000
10000000 loops, best of 3: 23.9 ns per loop
In [116]: %timeit pow(2, 10000)
10000 loops, best of 3: 27.7 µs per loop
答案 1 :(得分:2)
一个重要的编程原则:不要过早地过度优化。
鉴于1 << n
将在整数算术中执行,这显着限制了结果空间,最快的方法是预先计算它们并使用查找表(例如简单数组)。对于64位无符号整数类型,这样的表只有64个条目。
(在C ++中,您甚至可以在编译时使用一些模板技巧来评估它们。)