0

誰かがビット単位のバイナリAND演算子(&)の目的とその使用方法を説明できますか?関数を作成するさまざまな方法を検討していて、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

1つの数値と別の数値は、別の数値のビットによってマスクされた1つの数値のビットです。数値AND1が0(not n & 1になるTrue)の場合、2の倍数はすべて右端の2進数として0を持っているため、2で割り切れるということです。

  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番目の条件は2かどうかをチェックします。3番目の条件は(n&1)かどうかをチェックします。これは、数値が偶数かどうかをチェックします。バイナリ形式に変換されたすべての偶数の最後の桁は0です。たとえば、

14&1 = 1110&0001 = 0

14は偶数であり、今後は素数ではないことが証明されています。

于 2013-01-18T01:52:40.457 に答える