0

有人可以解释按位、二进制与运算符( & )的用途以及如何使用它吗?我正在研究制作isprime函数的不同方法并遇到了这个问题。

def isprime(n):
    # make sure n is a positive integer
    n = abs(int(n))
    # 0 and 1 are not primes
    if n < 2:
        return False
    # 2 is the only even prime number
    if n == 2: 
        return True    
    # all other even numbers are not primes
    if not n & 1: 
        return False
    # range starts with 3 and only needs to go up the squareroot of n
    # for all odd numbers (counts by 2's)
    for x in range(3, int(n**0.5)+1, 2):
        if n % x == 0:
            return False
    return True

我还查看了Python 位运算符示例,但无法掌握。

4

2 回答 2

6

一个数字和另一个数字是一个数字的位被另一个数字的位屏蔽。如果一个数字 AND 1 为 0(not n & 1将是True),这意味着它可以被 2 整除,因为 2 的所有倍数都有一个 0 作为最右边的二进制数字。

  11 = 00001011 (Not divisible by 2)      28 = 00011100 (Divisible by 2)
&  1 = 00000001                         &  1 = 00000001
---------------                         ---------------
       00000001                                00000000
于 2013-01-18T01:47:12.113 回答
0

例如,

12 & 7 = 1100 & 0111 = 0100 = 4

对于 isPrime 函数,第一个条件检查它是 0 还是 1。第二个条件检查它是否是 2。第三个条件然后检查 if (n&1),即检查数字是否为偶数。每个偶数在转换为二进制形式时的最后一位都是 0。例如,

14 & 1 = 1110 & 0001 = 0

14 被证明是偶数,因此不再是素数。

于 2013-01-18T01:52:40.457 回答