1

これらの操作のいくつかについて混乱しています (ビットごとの操作と論理操作の結合)。

x = 0x3F および y = 0x75 の場合、diff c 式のバイト値を見つけます。

1) x&y
2) x | y
3) ~x | ~y
4) x & ~y
5) x && y
6) x || y
7) !x || !y
8) x && ~y

試み

まず、16 進数を 2 進数に変換しました。

x = 00111111
y = 01110101

ここに私の試みがあります

1) 00110101
2) 01111111
3) 01111111
4) x & not y?  isn't the bang operator a logical operator?  what is the bit representation of !y?
5) x && y = TRUE = but how is that represented as a byte? 11111111?
6) x || y = how can this be represented as a byte?
7) !x || y = ???
8) x && ~y = ?????
4

2 に答える 2

1

論理否定演算子!は、「真」の値を「偽」に、またはその逆にします。また、ゼロ以外は「真」と見なされるため、単純な演算子はゼロ以外の場合はゼロを返します。

x & !yゼロで何かをマスキングするとゼロになるため、これはゼロになります。

「真」および「偽」の論理値は、それぞれ1およびに指定されます0。これは、論理演算子 (すなわち&&or||または 単項!) の結果が常に1orであることを意味し0ます。

上記の 2 つのステートメントを組み合わせると、 double logical-not ( !!) (どこかで見たことがあるかもしれません) を使用すると、常に0またはが返される理由がわかります1

于 2013-09-27T07:37:38.580 に答える