得到整数的第n位精度

2024-09-19 20:15:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到一个大整数a,和一个(相对较小的)整数n。在

使用Python获得n的二进制分解的第n位(从右边)的最快方法是什么?我不想写一个普通的Python插件(我不想写)


Tags: 方法插件二进制整数
2条回答

将位移到最后一个位置,遮住其他一切:

bit = (a >> n) & 1

这假设位以通常的方式索引,即最低有效位是位0。在

编辑:我不确定这是否是Python版本中最快的方法,但至少它是最直接的方法。根据Python版本和a和{}的特定值,可能有更快的方法,如answer by John Machin所示。在

您要求使用最快的方式,大概是使用现代版本的Python。现代版本的Python具有可变长度的int,而传统的智慧并不适用。转移大量数据并不便宜。换档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;它只是稍微慢一点。在

相关问题 更多 >