Java の古典的な面接の質問の 99% は間違っている可能性があります

序文

最近、インタビューでビット操作に関する質問に遭遇しました。

以下に示すように
·

出力aStringされる値は何ですか?
ビット演算を学習した後は、9<<4 桁が 2 進数で 0000 1001 として表現されることは誰もが知っています。前の
アルゴリズムに従えば、0000 10001 になります。
このとき、得られる値は 128+16 = 144 144
の値を取得し、java toHexString() に付属する静的メソッドを使用して 16 進数に変換します
。 、144 + 1 = 145 が得られ、16 進数に変換すると 91 になります。
·

説明する

この質問の答えは91間違っています!
私もその時はなぜ間違えたのかわからず混乱していたのですが
、最終的に面接官から「答えは120点です!」と言われました。しかし、答えはわかっていても、それがどのように出てきたのかはわからないので、
テストコードを書いてこの関数を一度実行してみたのですが、結果は依然として 120 でした。
もう言葉もありません

逆推論

16 進数の 120 が正しい答えであることはわかっています
。では、16 進数の 120 を 10 進数に変換するといくらになるでしょうか?
1
得られた結果は 288 で
、これは 288 です。引き続き 2 進法を使用して基数変換に従ってそれを表現し、どのようになるかを見てみましょう。 2 進数:
1 0010 0000
256 32
この計算は 256+32=288 です

バイナリ: 1 0010 0000 を左に 5 桁シフト

したがって、次のように結論付けることができます

1

上記の関数 9<<4+1 は、実際には最初に 4+1 を計算した後のビット演算です。

次に、この推論を検証するために、ビット演算と算術演算の優先関係を確認する
と、次の図が得られます。
1

おすすめ

転載: blog.csdn.net/Life_s/article/details/131005944