0

符号付き整数-28での3演算による論理右シフト。正解は何ですか?

  1. +203
  2. +83
  3. +3
  4. -3

2の補数-28は11100100です。論理右シフト演算を適用すると、上記のいずれの答えも得られません。

4

4 に答える 4

1

私はそれがひっかけ問題であることをほぼ確信しています。

インタビュアーは、あなたが「-3」と答えるかどうかを見ていました。もしあなたが (28>>>3 は 3 であるから -28>>>3 は -3 であるという誤った推論で) もしあなたが 2 の補数を理解していないことに彼は気づいたでしょう。

彼は、4 つの選択肢のどれも正しくないと答えてほしいと思っていました。彼はあなたにそうしてほしかった

  1. 算術右シフトとは異なり、論理右シフトが符号ビットを大きさの一部に変換することにより、小さな負の数を巨大な正の数に変える方法を説明してください
  2. 答えは、int を表すために使用されるバイト数に依存することを指摘してください。
于 2010-10-10T05:10:32.933 に答える
0

たぶん、トリックは2の補数表現を想定しないことです。符号と大きさの表現を想定すると、ほとんどのシフト実装には符号ビットが含まれないため、答えは-3になる可能性があります。

于 2010-10-10T15:31:43.507 に答える
0

符号付き整数を右にシフトすると、多くのことができます。

  1. 数値が負の場合は、結果を符号拡張し (左側に 1 ビットをシフトします)、数値がより小さな負の数値のように見えるようにする効果があります。
  2. 数値が正の場合、シフトしたビットごとに 2 で割ります。

ただし、この動作は技術的には「実装定義」です。

この投稿を参照してください:シフト演算子 (<<、>>) は C で算術または論理ですか?

于 2014-05-01T21:53:17.663 に答える
0

次のようなばかげた質問です。

  • 左に 0 または 1 が追加されるかどうかは、負の数に対して普遍的に定義されているわけではありません (Wikipedia によると、「空のビット位置は通常ゼロで埋められます」-私の強調)
  • 関連する整数サイズについては議論されていません。
  • 使用中の負の数の複数のビット単位の表現があります。

一部の言語 (Java など) では、適切な CPU 命令を持たないプラットフォームが必要な答えを計算するためにいくつか発行する必要があるように、新しい最上位ビットを使用します。 CPU がネイティブに提供する動作。

2 の補数は、負の数の最も一般的な表現です。あなたの質問には、「-28 の 2 の補数は 11100100 です。」と記載されています... 質問の一部として提供されていなかったと思います (そうであれば、回答の後にあるため、少し奇妙です)。まだ...

2 の補数で実行すると...

11100100 >> 3 = 00011100 or 11111100 = 28 or -4

表現が 1 の補数の場合:

11100011 >> 3 = 00011100 or 11111100 = 28 or -3

表現が符号ビット、絶対値の場合:

10011100 >> 3 = 00010011 or 11110011 = 19 or -(127-12)=-115

(note that the question says a logical bit shift, which by definition ignores any possible interpretation of the bits, so the sign bit is shifted along with others)

int の #bits について...私は、それが大きすぎてどのオプションにも一致しない値になるか、そうでなければ違いがないことは明らかだと思います (1 が左に追加されている場合) 1 または 2 の補数)、その問題は無視できます。

したがって、上記の簡単な計算が間違っていない限り、もっともらしいアーキテクチャで正しい可能性がある唯一の答えは -3 ですが、それでも可能性は非常に低いです。結局のところ、彼らが実際にテストして、質問に答えないままにしておく自信がある人を確認したり、答えがどれも正しくない可能性が高いことに注釈を付けたりしていなかったのではないかと思っています....

于 2010-10-12T01:24:40.587 に答える