0

ゲイル・ラークマン・マクダウェルによる本「コーディングのインタビューを割る」を読んで、ビット操作の章で、質問を投稿します。

の値を見つけます (数値が 4 ビットで表されると仮定します):

1011 & (~0 << 2)

ここで、~0 = 1 を左に 2 回シフトすると 100 (4 ビットを完了するには = 0100) になります。1011 に 0100 を足すと 0000 になります。

しかし、私が持っている答えは1000です。

4

4 に答える 4

8

~0は 1 ではなく1111(または0xf) です。~演算子はビット単位のNOT 演算子であり、論理演算子( !) ではありません。

したがって、左に 2 桁シフトすると、最後の 4 ビットは1100. そして1100 & 1011正確1000です。

于 2013-06-16T13:01:21.330 に答える
2

~0は 1 ではありません。0はデフォルトで整数になり、NOT 演算は最初のビットだけでなくすべてのビットを逆にします。

于 2013-06-16T13:02:06.607 に答える
2

~ビットごとの補数演算子です。

の値は4 ビットで~0なければなりません。1111

1011 & (~0 << 2)
= 1011 & ( 1111 << 2)
= 1011 &  1100
= 1000
于 2013-06-16T13:02:31.287 に答える
2
1011 & (~0 << 2)
  1. ~0は 1 ではなく11112または0xF16です。
  2. 1111左に 2 回シフトすると1100(左端の 2 ビットが削除され、右から 0 が埋められます)。
  3. 加算する1011 & 1100と、対応するビット位置が 1 である各ビット位置で 1 が得られ、それ以外の場合は 0 になります。これにより、結果は になり1000ます。
于 2013-06-16T13:16:32.327 に答える