2011-12-07 18 views
4

論理演算子andorとビットごとのアナログの相違点&,を使用していますか?さまざまなソリューションの効率に違いはありますか?論理とビットの比較

答えて

7

論理演算子は論理値で動作し、ビット演算子は整数ビットで動作します。パフォーマンスについて考えるのをやめ、それが意味するところで使用してください。

if x and y: # logical operation 
    ... 
z = z & 0xFF # bitwise operation 
+3

パフォーマンス上の問題:通常、これらの低レベル操作の違いは、プログラムの全体的なパフォーマンスに10 ** 6回以上のオーダーの影響を与えます。あなたが(OP!)何度もその操作を実行する必要がある場合は、numpy/scipyのような数値/科学ライブラリに切り替えなければならない可能性があります。 – mac

+7

パフォーマンス上の問題。 'and'と' or'は左から右に作用する "短絡"演算子なので、 'aと(何かひどく高価な)'が 'a&(something 'a'がFalseのとき)。短絡の評価は、まったく無視できる効果ではありません。それは深遠です。 –

-2

論理演算子はこれらです:

& |^~ 

彼らが許可:

(true || false) // evaluates to true 
(!true) // evaluates to false 

ビット演算子はこれらです:彼らはあなたが例えば論理値を操作できるよう

&& || == ! 

あなたはbiで操作するこのような進ビット、:trueあなたは1と0以外の(バイナリ)番号を使用している場合は1とfalseが0に等しい等しいので、

~011 = 100 
0101 & 0011 = 0001 
+3

これはPythonの質問です。あなたのコードは実行されず、エラーが発生します。また、それらのコードが動作することについての記述は間違っています。おそらく間違った言語タグをクリックした? : -/ – mac

+0

だから、私は喜んだ、マック。 – Jivings

+1

これはあまりにも多くのdownvotesを取得する前にこれを削除することがあります。 –

1

論理演算子は、ブール値のために使用され、ゼロではありません、その後、任意の数になります1。
例:int x = 5;(バイナリで101)int y = 0;(2進数で0)この場合、x && y0を出力します.101は1に変更され、0は0に保たれました。これはtrue && falseと同じで、false (0)となる。

一方、ビット単位の演算子は、2つのオペランドのすべての単一ビットに対して演算を実行します(したがって、ビット単位の演算)。
例:int x = 5; int y = 8;印刷x | y(ビット単位OR)これを計算するであろう:
0101(5)
| 1000(8)
-----------
= 1011(11)
11を印刷するであろう意味。

関連する問題