On Fri, Jul 20, 2018 at 7:00 PM, Brian Oney via Python-list <python-list@python.org> wrote: > On Fri, 2018-07-20 at 06:37 +0000, Steven D'Aprano wrote: >> On Fri, 20 Jul 2018 08:25:04 +0200, Brian Oney via Python-list wrote: >> >> > PS: Can I twiddle bits in Python? >> >> Yes. >> >> These operators work on ints: >> >> bitwise AND: & >> bitwise OR: | >> bitwise XOR: ^ >> > That's right I had forgotten about that. Thank you for the quick answer.Some > fun:$ ipythonPython 2.7.13 (default, Nov 24 2017, 17:33:09) ...In [1]: j = > 16; i = 1 > In [2]: print(i+j); print(i|j)1717 > In [3]: %timeit i+j10000000 loops, best of 3: 65.8 ns per loop > In [4]: %timeit i|j10000000 loops, best of 3: 73 ns per loop > In [5]: %timeit 16|110000000 loops, best of 3: 28.8 ns per loop > In [6]: %timeit 16+110000000 loops, best of 3: 28.8 ns per loop > I wonder why the difference between [3] and [4]. My mental ranking of speed > of operations tells me it should be the other way around. > Are 16|1 and 16+1 internally the same operation (for integers)?
What you're seeing is nothing but noise. With numbers this low, you can't really judge anything. In fact, operations 5 and 6 are probably just looking up constants that got calculated once, so they're literally proving nothing at all. Even at the CPU level, you'll generally find that adding two numbers takes the same amount of time as bitwise Or, mainly because both of them take a single clock cycle. (Proving that they actually DON'T take the same amount of time requires a fairly deep understanding of the internal workings of the chip.) Definitely at the Python level, the costs are virtually identical. Don't do bitwise operations for the sake of performance; do them because they clearly and adequately describe what you're doing. :) ChrisA -- https://mail.python.org/mailman/listinfo/python-list