1

私はインターネットでこのJavaの質問を見つけ、それについていくつか質問がありました。

正しい説明は次のとおりです。

  • a)>>は符号付きシフトを実行し、>>>は符号なしシフトを実行します。
  • b)>>>は符号付きシフトを実行し、>>は符号なしシフトを実行します。
  • c)<<は符号付きシフトを実行し、<<<は符号なしシフトを実行します。
  • d)<<<は符号付きシフトを実行し、<<は符号なしシフトを実行します。

符号付きシフトが何であるかは少しわかりませんが、シフト自体で何が起こっても(これは私にとって最も理にかなっています)、2進数の符号を保持することを意味しますか、それともMSBが行うことを意味しますか?シフト操作自体で上書きされない限り変更しないでください。

それで

  • a)true:>>を使用してシフトをいくつ行っても、MSBは常に元の状態として保持されるため、署名されますか?>>>は常にMSBを0で上書きするのに対し、符号なしですか?
  • b)上記の説明のためにfalse
  • c)わからない、最初のビットが<<シフト操作で上書きされる可能性があり、したがってその符号が保持されないためですか?
  • d)もう一度わからない。
4

5 に答える 5

2

別の説明: http ://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

記事から:「符号なし右シフト演算子> >>>」はゼロを左端の位置にシフトしますが、「>>」の後の左端の位置は符号拡張に依存します。

于 2012-08-14T14:01:37.647 に答える
1

「>>」は、左端のビットが何であれ、新しいビットを埋める符号付きシフトを実行します。左端のビットは、数値が負か正かを決定します。正の場合は0、負の場合は1。例えば、

>> 1
10111100 becomes 11011110
the leftmost bit is a 1, so the new bits after the shift become ones

>> 1
01110011 becomes 00111001 since the leftmost bit is a 0

">>>"は符号なしシフトを実行します。これは、シフト後に新しいビットが常にゼロで埋められることを意味します。例えば、

>>> 1
10111100 becomes 01011110
the new bits are filled in as zeroes no matter what the leftmost bit is


enter code here
于 2012-08-14T14:06:19.657 に答える
0

Java言語仕様を確認してください:http: //docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.19

于 2012-08-14T14:00:14.283 に答える
0

シフト自体で何が起こっても(これは私にとって最も理にかなっています)、2進数の符号を保持することを意味しますか、それともシフト操作自体で上書きされない限りMSBは変更されないことを意味します。

それは同じことです。;)

>>>は常にMSBを0で上書きするため、符号なし

あなたがそうするならば、-1 >>> 0それはまだ否定的です、しかしそれは基本的に正しいです;)

左シフトは符号付きまたは符号なしであり、単に左シフトであり、あなたが言うように、それは符号を変えるかもしれないし、変えないかもしれません。

于 2012-08-14T14:01:08.870 に答える
0
<<  Signed left shift      op1 << op2 
>>  Signed right sift      op1 >> op2 
>>> Unsigned right shift   op1 >>> op2 
于 2012-08-14T14:01:16.750 に答える