4

これはおそらくかなり基本的なものです...しかし、私はそれを理解していないようです:

どうやって

(2 & 1) = 0
(3 & 1) = 1
(4 & 1) = 0

等..

上記のこのパターンは、偶数を見つけるのに役立つようです

また

(0 | 1) = 1
(1 | 1) = 1
(2 | 1) = 3
(3 | 1) = 4
(4 | 1) = 5
(5 | 1) = 5

ブール代数がビット間でどのように機能するかを知っています。しかし、ブール代数が整数でどのように機能するかはわかりません (少なくとも C# では)。

前もって感謝します。

4

4 に答える 4

5

C# でもバイナリと同じように機能します。

2 | 1 = 34 | 1 = 5

これを理解するには、1、2、3、4、および 5 のバイナリ表現について考える必要があります。

010 | 001 = 011100 | 001 = 101

同様に:

010 & 001 = 000011 & 001 = 001

于 2008-11-26T03:47:49.827 に答える
3

and2 つの数値のビット文字列間でブール演算を実行しているため、最初の結果が得られます。

2 & 1 => 010 & 001 = 000 = 0
3 & 1 => 011 & 001 = 001 = 1
4 & 1 => 100 & 001 = 000 = 0
5 & 1 => 101 & 001 = 001 = 1

実際には、「1」ビットが設定されているかどうかをテストしています。これは奇数の場合にのみ真になります。

操作を実行する場合or:

0 | 1 => 000 | 001 = 001 = 1
1 | 1 => 001 | 001 = 001 = 1
2 | 1 => 010 | 001 = 011 = 3
3 | 1 => 011 | 001 = 011 = 3
4 | 1 => 100 | 001 = 101 = 5
5 | 1 => 101 | 001 = 101 = 5

この場合、or常に1ビットを設定するという効果があるため、偶数は最も近い大きい奇数に 1 ずつインクリメントされます。

于 2008-11-26T03:54:05.570 に答える
1

重要なのは、CPU が 32 のブール演算を並行して実行していることです。入力整数の各ビット位置に対して 1 つずつです (もちろん、32 ビット整数を想定しています)。

于 2008-11-26T03:53:53.933 に答える
0

整数に対してビット単位の操作を行っています。最初の整数の各ビットと他の整数の対応するビットの論理和を実行していること。次に、これらすべての操作の結果を返します。たとえば、4 = 0100 および 1 = 0001 の場合、これらの論理 AND はビットを順番にビット化し、0000 を取得します (0&0 = 0、1&0 = 0、0&0 = 0、および 0&1 = 0 であるため)。or の場合は、0101 になります (0|0 = 0、1|0 = 1、0|0 = 0、および 0|1 = 1 であるため)。秘訣は、これらが C# のブール値のみを操作する論理演算ではなく、ビット単位の演算であることです。

于 2008-11-26T03:52:39.957 に答える