Мы знаем что битовые операторы работают жутко быстро. Но и простые операторы достаточно оптимизированы.
Вот мои тесты на разных платформах (и разном железе, так что смотрим только разницу)
🔸 Windows 10
>>> timeit.timeit('for x in range(1000): x%2', number=100000)
3.8916409015655518
>>> timeit.timeit('for x in range(1000): x&1', number=100000)
2.883111000061035
🔸 Windows 7 VMWare>>> timeit.timeit('for x in range(1000): x%2', number=100000)
4.5197880999999995
>>> timeit.timeit('for x in range(1000): x&1', number=100000)
5.360066200000006
🔸 Ubuntu 16 VPS>>> timeit.timeit('for x in range(1000): x%2', number=100000)
2.355823243036866
>>> timeit.timeit('for x in range(1000): x&1', number=100000)
2.754374884068966
🔸 Debian 10 VMWare>>> timeit.timeit('for x in range(1000): x%2', number=100000)
2.979030784990755
>>> timeit.timeit('for x in range(1000): x&1', number=100000)
3.54338647100667
🔸 Raspbian 10 (на RaspberryPI 4 с процессором ARM)>>> timeit.timeit('for x in range(1000): x%2', number=10000)
1.1418334439999995
>>> timeit.timeit('for x in range(1000): x&1', number=10000)
1.4677007579999923
Хм, только на Windows 10 оператор & быстрей чем %. Может это связано с тем что это единственный не виртуальный процессор (кроме ARM на малине)?Не хочу ничего утверждать этой информацией, это просто для заметки. Не так много у меня железа чтобы сделать нормальные тесты и не так много времени чтобы выяснить причину такого поведения.