2011-01-21 11 views
26

「ビット単位のAND」演算では通常、単一のアンパサンド演算子が使用されることを理解します。しかし、あなたは2つの数字の比較のためにそれを使用するときに得られる興味深い結果を誰かが説明するのを助けることができますか?整数の単一のアンパサンド演算子(&)の動作の理解

たとえば、

(6 & 2) = 2 
(10 & 5) = 0 
(20 & 25) = 16 
(123 & 20) = 16 

これらの結果の間には論理的なリンクがないようです - 何か不足していますか?オンラインドキュメントはブール値または単一ビットの比較を参照しているように見えます。

+1

本当に(20&25)== 4ですか? – Nick

+1

@ニック私はそれを持っています。 –

+1

あなたが見ているのは* "ビット単位のAND"演算の結果です*。 ( '(20&25)= 4 'ビットを除いて、私は誤植と推測しています) – LukeH

答えて

46

ですそれぞれのバイナリ表現を比較する。

110 &  010 =  010 
    1010 & 0101 = 0000 
    10100 & 11001 = 10000 
1111011 & 0010100 = 0010000 

いずれの場合も、入力の左側と右側の両方で1の場合のみ、結果の数字は1になります。

+0

+1:すごい、そのような短い時間でのすべての操作! – Rekin

+6

@レキン:これらのような小さな数字については、私の頭の中で十進数、十進数、二進数の間で変換することができます。私はまたASCIIテーブルの大部分をタックするコーナーを見つけました。 –

+1

@Jefrrey、ちょうど好奇心の外に - あなたはいくつかの低レベル環境で働いていますか?プロトコル、メッセージング、パフォーマンス関連のソフトウェアなど – Rekin

6

あなたがバイナリ表現に自分の番号を変換する必要があり、その後、あなたは実際には110 & 010 = 010など 5で6 & 2 = 2のような結果との間のリンクが表示されます1010 & 0101 = 0000

4

バイナリと演算は、バイナリで表される整数に対して実行されます。

110 (6) 
010 (2) 
-------- 
010 (2) 
2
6  = 0110 
2  = 0010 
6 & 2 = 0010 

20  = 10100 
25  = 11001 
20 & 25 = 10000 

たとえば(あなたは計算がこの1のために間違っているように見えます)

等...内部

2

、整数はbinary formatに格納されています。私はあなたがそれについて読むことを強く勧めます。数字のビット表現について知っていることは非常に重要です。言われていること

、ビット単位の比較は、パラメータのビットを比較:

Decimal: 6 & 2 = 2 
Binary: 0110 & 0010 = 0010 
0

Bitwizeおよび2進数で1つずつ結果は、2つの数の間のcomonされたビットであるビットに一致します。

数値をバイナリに変換するには、バイナリシステムを理解する必要があります。

例えば 6 = 110のバイナリ

110は1×4 + 1×2 + 0×= 6

2を表し、次いで を0x4 + 1×2 + 0×= 2

Bitwizeでのみ保持両方の数字の位置が設定されている位置、この場合は2のビット、結果は2です。

すべての余分なビットが最後の2倍になるため、4ビットの数値は乗算器8,4,2,1また、ここでは、0から15までのすべての数値(乗数の合計)を表します。

2

ビット単位のANDは、ビット単位でAND演算を行います。

結果を予想するには、数値ではなくビットを見る必要があります。

、両方の数の1が同じ位置にあります場合にのみ、あなたに1を与える:

6(110) & 2(010) = 2(010) 
10(1010) & 5(0101) = 0(0000) 

ビット単位のOR 1は、同じ位置にいずれかの数字であるかどうあなたに1を与える:

6(110) | 2(010) = 6(110) 
10(1010) | 5(0101) = 15(1111)