2013-05-05 22 views
6

私はコードの効率を向上させるために基本的な知識を使いたいと思っています。 私はバイナリシステムでそれを知っています。 numberの最後の桁が1のとき、これは奇数であり、0は偶数である。 この方法でPythonのint型を判断する方法は?そのPythonは、それを行うためのビルドインメソッドを提供していますか?整数を奇数または偶数と判断する方法は? (バイナリ方法)

1と

答えて

12

とIT:

0000101001000101 
    0000000000000001 
& 
__________________ 
    0000000000000001 

あなたが1を取得する場合、番号が奇数です。 0が得られれば、その数は偶数です。これは動作しますが、私の代わりにモジュロ演算子を使用します。それは同じように動作します

>>> 8888 % 2 
0 
>>> 8881 % 2 
1 

、同じように高速であり、よりよいなります

In [65]: %timeit random.randint(1, 1000000) & 1 == 0 
1000000 loops, best of 3: 1.02 us per loop 

In [66]: %timeit random.randint(1, 1000000) % 2 == 0 
1000000 loops, best of 3: 1.03 us per loop 
3

ます場合は、番号を&と1することができます0を入力してください。数字が偶数であれば、1は数字が奇数であることを意味します。

>>> 2 & 1 
0 
>>> 3 & 1 
1 
+0

私は以前この方法を使用しています。ありがとう – Vinceeema

1

&演算子を使用して、最下位ビットが設定されているかどうかを確認できます。

a = 77 
is_odd = bool(a & 1) 
print is_odd    # Prints True 

a = 64 
is_odd = bool(a & 1) 
print is_odd    # Prints False 
2

** PYTHON:最下位ビット方法**

>>> def is_odd(i): return bool(i & 1) 

>>> def is_even(i): return not is_odd(i) 

>>> [(j, is_odd(j)) for j in range(10)] 
[(0, False), (1, True), (2, False), (3, True), (4, False), (5, True), (6, False), (7,  
True), (8, False), (9, True)] 
>>> [(j, is_even(j)) for j in range(10)] 
[(0, True), (1, False), (2, True), (3, False), (4, True), (5, False), (6, True), (7, 
False), (8, True), (9, False)] 
>>> 

この缶はあなたを助けたりない場合を参照してください。

説明:
整数が偶数か奇数かをテストします。このタスクを解決するには、複数の方法があります。言語がそれらを提供する場合は、偶数と奇数の述語を使用します。最下位桁を確認してください。 2進整数の場合、iはビットであり、iが偶数なら1が0に等しく、f iが奇数なら1に等しくなります。 iを2で割る.iが偶数の場合、余りは0に等しい。余りは+1または-1の場合は-1となります。 modular congruencesを使用する:iが偶数の場合、i≡0(mod 2)。 f iが奇数の場合、i≡1(mod 2)。

+0

整数が偶数か奇数かをテストします。 このタスクを解決するには、複数の方法があります。 偶数および奇数述部を使用すると、偶数および奇数述部を使用できます。 最下位桁を確認してください。 2進整数の場合、iはビットであり、iが偶数なら1が0に等しく、f iが奇数なら1に等しくなります。 iを2で除算します.f iが偶数の場合、余りは0になります。余りは+1または-1の場合は-1となります。 modular congruencesを使用してください: iが偶数の場合、i≡0(mod 2)。 if iが奇数の場合、≡1(mod 2)です。 –

0
# Modular Congruencies # 

>> def is_even(i): 
    return (i % 2) == 0 

>>> is_even(1) 
False 
>>> is_even(2) 
True 
>>> 
+0

@Vinceeema もっと簡単な方法! –

関連する問題