Вы просили за быстрый образом, по-видимому, используя современную версию Python. Современные версии Python имеют переменную длину ints, и обычная мудрость не применяется. Смещение большого числа не из дешевых. Смещение 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
; он только немного медленнее.
Какой размер большой? –
@JohnMachin: 'a' имеет около 1000 цифр,' n' составляет около 1000. – Randomblue