2016-10-05 21 views
-4

単項演算子 '&'はどのように機能しますか?単項演算子 '&'はどのように動作しますか

int num = 50, num2 = 100; 

int x = num & num2; 

結果:X = 32

int num = 100, num2 = 90; 

int x = num & num2; 

結果:私はこのコードを実行されたテストプロジェクトで

は、x =

64は、これはどのように計算されますか? MSDNから

+3

それは単項演算子ではありません。それが何であるかについては、_bitwise operations_を読んでください。 – paddy

+1

単純なgoogle検索を行うと、答えが返され、単項演算子ではなく、ビット単位のANDが返されます。 –

+0

'&'演算子は2つのオペランドをとります。なぜそれを単なるものと呼んでいますか? –

答えて

2

:&

バイナリ演算子は整数型やブールのために事前に定義されています。 整数型の場合、&は、そのオペランドの論理ビット単位の論理積を計算します。 ブールオペランドの場合、&はオペランドの論理積を計算します。その は、そのオペランドが両方とも真である場合にのみ真となります。

あなたの場合は、インテグラルタイプのバージョンです。

ので:

50 in binary is 00110010  
100 in binary is 01100100  
AND result is 00100000 (32 dec) 
0

短い答えは - それが依存しています。

整数の場合、あなたの場合と同じようにビット操作を行います。したがって01100100(100)ビット単位AND00110010(50)= 00100000(32)です。

怠け者でAND(常に両方の式を評価する)ブール値の場合 - &&とは異なり、最初にfalseの場合は2番目の式を評価しません。

1

ビット単位の演算子はビット単位で動作し、ビットごとの演算を実行します。

バイナリAND演算子は、両方のオペランドに存在する場合、ビットを結果にコピーします。

(A & B) = 12, i.e., 0000 1100 
1

まず最初に:それはの引数を持っているとして、この文脈で&は、バイナリ演算子です。 ではなく、 a unary演算子です。

& 2つの引数を持つビット単位のAND演算子です。

50 & 100は、0b110010 & 0b1100100である。 &を各ビットに適用すると、0b100000は32となります。

100 & 90も同様に解析できます。

1

バイナリ値

50 (10) = 0110010 (2) 
100 (10) = 1100100 (2) 

と論理AND両方の値が1になりましたかに得されているので、ビットのみ使用される:

0100000 (2) = 32 (10) 

100 (10) = 1100100 (2) 
AND 
90 (10) = 1011010 (2) 
------------------------ 
64 (10) = 1000000(2) 
0

これをビット単位ANDです。

"0b0110010 AND 0b1100100"では、1と0の共通部分を共有する場所を探してください.0b0100000 = 32になります。

「100 AND 90」は0b1000000 = 64になります。

私はそれが助けてくれることを願っています。

0

ビット演算子です。 50のためのビット(バイナリ)は、(右への追い出し)、それらを整列させる際に110010と100は、あなたが&オペレータは各位置で、あなたが1を取得するように動作 110010 1100100

得る、1100100であります両方の行に1が指定されていれば、それ以外の場合は0が返されます。 110010 1100100 ||||||| 0100000 だからあなたは32

1

あるバイナリ結果100000を取得し、何が起こっているかを見てみましょう(ビット単位操作を行うとき、明らかビットを見るために)バイナリとして両方の数を表します。

private static String AndExplanation(int left, int right) { 
    String x = Convert.ToString(left, 2); 
    String y = Convert.ToString(right, 2); 
    String z = Convert.ToString(left & right, 2); 

    int length = Math.Max(x.Length, y.Length); 

    return String.Join(Environment.NewLine, 
    $"{x.PadLeft(length, '0')} ({left}) &", 
    $"{y.PadLeft(length, '0')} ({right})", 
    new String('-', length), 
    $"{z.PadLeft(length, '0')} ({left & right})" 
); 
} 

テスト

Console.Write(AndExplanation(50, 100)); 

Console.Write(AndExplanation(90, 100)); 

あなたはわかります

0110010 (50) & 
1100100 (100) 
------- 
0100000 (32) 

1011010 (90) & 
1100100 (100) 
------- 
1000000 (64) 
関連する問題