シフト演算子は、バイナリに基づいて数値をシフトします。変換の方向と数値の埋め込み規則に応じて、<>(符号付き右シフト)、>>(符号なし右シフト)の 3 つのタイプに分類されます。 。
shift演算時、byte、short、char、int型をシフトした結果がint型になるように、実際の移動数がその余りになるように指定します。つまり、33 回シフトする場合と 1 回シフトする場合とで得られる結果は同じです。ロング値を移動する場合、実際の移動回数は移動回数と 64 の余りになります。つまり、66 回移動した結果は 2 回移動したことと同じになります。ハード 386 以降、シフトのハードウェアはワード長まで削除され、32 ビットの右への移動は 0 になります。32 ビット右へのシフトは 9 のままです。 for ループの条件を i<=64 などに変更しても、結果は同じであることがわかります。
3 つのシフト演算子の移動規則と使用法は次のとおりです:
<<演算規則: すべての数値を 2 進数形式の対応する桁数だけ左に移動し、上位ビットをシフトアウト (破棄) し、下位ビットのギャップを埋めます。
構文形式:
シフトする数値 << 2 の場合、数値 3 を 2 桁左にシフトします
3 << 2
まず 3 を 2 進数 0000 0000 0000 0000 0000 0000 0000 0011 に変換し、次にその数値の上位ビット (左) にある 2 つのゼロをシフトアウトし、他の数値を 2 ビット左にシフトし、最後に 2 つのゼロをシフトインします。下位ビット (右) 空のスペースをゼロで埋めます。最終的な結果は 0000 0000 0000 0000 0000 0000 0000 1100 で、10 進数に変換すると 12 になります。 数学的意味:
数値がオーバーフローしないという前提で、正の数と負の数について、左に 1 桁シフトすることは乗算と同等です。 2 1 の 1 乗を行うと、n ビットを左にシフトすることは、2 の n 乗を乗算することと同じになります。
>>操作規則: バイナリ形式で対応する桁数に従ってすべての数値を右に移動し、下位ビットをシフトアウト (破棄) し、上位ビットの符号ビットを埋める、つまり埋め込みます。正の数値の場合は 0、負の数値の場合は 1
シフトする必要がある数値 >> シフトの数
たとえば、11 >> 2 は数値 11 を右に 2 シフトすることを意味します。
を配置し、下位ビットの最後の 2 つの数値を移動します。数値は正の数であるため、上位ビットにはゼロが埋め込まれます。得られる最終結果は 0000 0000 0000 0000 0000 0000 0000 0010 です。10 進数に変換すると 3 になります。
数学的意味: 1 桁右にシフトすることは 2 で除算することと同等であり、n ビット右にシフトすることは で除算することと同等です。 2のn乗。
>>>操作規則: バイナリ形式のすべての数値を対応する桁数だけ右に移動し、下位ビットをシフトアウト (破棄) し、上位ビットの空のビットをゼロで埋めます。これは、正の数の場合は符号付き右シフトと同じですが、負の数の場合は異なります。
他の構造も>>と同様です。
JAVA シフト演算子に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。