単項演算子 '&'はどのように機能しますか?単項演算子 '&'はどのように動作しますか
int num = 50, num2 = 100;
int x = num & num2;
結果:X = 32
int num = 100, num2 = 90;
int x = num & num2;
結果:私はこのコードを実行されたテストプロジェクトで
は、x =64は、これはどのように計算されますか? MSDNから
単項演算子 '&'はどのように機能しますか?単項演算子 '&'はどのように動作しますか
int num = 50, num2 = 100;
int x = num & num2;
結果:X = 32
int num = 100, num2 = 90;
int x = num & num2;
結果:私はこのコードを実行されたテストプロジェクトで
は、x =64は、これはどのように計算されますか? MSDNから
:&
バイナリ演算子は整数型やブールのために事前に定義されています。 整数型の場合、&は、そのオペランドの論理ビット単位の論理積を計算します。 ブールオペランドの場合、&はオペランドの論理積を計算します。その は、そのオペランドが両方とも真である場合にのみ真となります。
あなたの場合は、インテグラルタイプのバージョンです。
ので:
50 in binary is 00110010
100 in binary is 01100100
AND result is 00100000 (32 dec)
短い答えは - それが依存しています。
整数の場合、あなたの場合と同じようにビット操作を行います。したがって01100100
(100)ビット単位AND00110010
(50)= 00100000
(32)です。
怠け者でAND(常に両方の式を評価する)ブール値の場合 - &&
とは異なり、最初にfalse
の場合は2番目の式を評価しません。
ビット単位の演算子はビット単位で動作し、ビットごとの演算を実行します。
バイナリAND演算子は、両方のオペランドに存在する場合、ビットを結果にコピーします。
(A & B) = 12, i.e., 0000 1100
まず最初に:それはの引数を持っているとして、この文脈で&
は、バイナリ演算子です。 ではなく、 a unary演算子です。
&
2つの引数を持つビット単位のAND演算子です。
50 & 100
は、0b110010 & 0b1100100
である。 &
を各ビットに適用すると、0b100000
は32となります。
100 & 90
も同様に解析できます。
バイナリ値
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)
これをビット単位ANDです。
"0b0110010 AND 0b1100100"では、1と0の共通部分を共有する場所を探してください.0b0100000 = 32になります。
「100 AND 90」は0b1000000 = 64になります。
私はそれが助けてくれることを願っています。
ビット演算子とです。 50のためのビット(バイナリ)は、(右への追い出し)、それらを整列させる際に110010と100は、あなたが&オペレータは各位置で、あなたが1を取得するように動作 110010 1100100
得る、1100100であります両方の行に1が指定されていれば、それ以外の場合は0が返されます。 110010 1100100 ||||||| 0100000
だからあなたは32
あるバイナリ結果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)
それは単項演算子ではありません。それが何であるかについては、_bitwise operations_を読んでください。 – paddy
単純なgoogle検索を行うと、答えが返され、単項演算子ではなく、ビット単位のANDが返されます。 –
'&'演算子は2つのオペランドをとります。なぜそれを単なるものと呼んでいますか? –