& Operatorに関するMSDNの記事に基づいて、C#でバイナリAND操作を実行しようとしています
私が行った場合:
1111 & 10 = 2 (0010) // Which is what i expect
でも、
1111 & 100 = 68 (1000100) // Which is **not** what i expect.
出力は100になると思っていたでしょう
私は何が欠けていますか?
& Operatorに関するMSDNの記事に基づいて、C#でバイナリAND操作を実行しようとしています
私が行った場合:
1111 & 10 = 2 (0010) // Which is what i expect
でも、
1111 & 100 = 68 (1000100) // Which is **not** what i expect.
出力は100になると思っていたでしょう
私は何が欠けていますか?
指定した数値 1111 と 100 は、2 進数ではなく、10 進数として扱われています。
バイナリ整数 1111 が必要な場合は15
、10 を基数とするバージョンであるため、 を入力する必要があります。そう:
15 & 4
となり4
ます。
C# には、整数リテラルをバイナリで指定するための構文はありません。自分で 10 進数に変換するか、 through などの実行時変換を使用する以外に選択肢はありませんConvert.ToInt
。
10 進数の使用に加えて、16 進数も接頭辞として機能します0x
。0xF & 0x4
ただし、バイナリ リテラルのプレフィックスはありませんが、これを行うことができます。
Convert.ToInt32("1111", 2) & Convert.ToInt32("100", 2)
出力は正しいです。
ポイントは、数値を 2 進数と見なしていることです。ここでの数値は 10 進整数として扱われます。C# の仕様 - 整数リテラルおよび SO の質問C# バイナリ リテラルからわかるように、C# には 6 つまでのバイナリ定数はありません。
ただし、以下の説明を参照してください。
1111 10001010111
& 10 & 00000001010
= 2 = 00000000010
1111 10001010111
& 100 & 00001100100
= 68 = 00001000100
& 演算子の詳細については、MSDN を参照してください。