グッドJavaプログラマ学習ルートは、Javaでの変位操作を共有します

グッドJavaプログラマ学習ルートは、Javaでの変位動作を共有し、Javaで、変位動作は、基本的な操作に属し、シンボル<<と>>である左右の変位の変位。整数のみが他の人がJavaで考慮していないので、シフト操作がメモリの変位の二進整数表現であるので、変位はJavaで正と負の数に分割され、シフトさせることができます。

<<すなわち、モバイルは、2倍の数で乗算され、すなわち、何回、2を乗じ、すなわち、例えば、5 << 2 * 2 * 2 = 20、即ち、右方向変位>>に対応する正の数、左方向への変位のために2で割った当量、注意が整数整数で割られます。すなわち、例えば、5 >> 1/2 = 2。

次の例:

5 << 1、私たちは、一例として、int型:

5番

int型はバイナリとして表される:0,000,000,000,000,000 0,000,000,000,000,101

即ち、左から1:0000 0000 0000 0000 0,000,000,000,001,010(後方パッチ0)

だから、結果は次のとおりです。数10

5 >> 1、私たちは、一例として、int型:

5番

int型はバイナリとして表される:0,000,000,000,000,000 0,000,000,000,000,101

すなわち、右に1:0000 0000 0000 0000 0,000,000,000,000,010(高いビット0)

だから、結果は次のとおりです。数2

だから、正の数のために、あなたは、変位を自由に使用でき、乗算や除算の結果はほとんど差はなく、より良いパフォーマンスではありません。


変位動作はJavaで署名された変位と呼ばれているので、それが負の場合と同様、Javaの変位で、注意して使用すべきです。それを計算する方法を、直接次のように例示されている端部の変位を署名しました。

-5 << 1、我々はint型、例えば、メモリ内の負の存在に起因は、補体あり、以下を参照してください。

デジタル-5

int型バイナリ元のコードは次のように表現される:1,000,000,000,000,000 0,000,000,000,000,101

そして、その反転は、次のとおりです。1,111,111,111,111,111 1,111,111,111,111,010

補体は、次のとおりです。1,111,111,111,111,111 1,111,111,111,111,011

すなわち、左の結果に1:1,111,111,111,111,111 1,111,111,111,110,110(後方パッチ0)

計算結果が反転している:1,111,111,111,111,111 1,111,111,111,110,101

結果は、元のコードのように計算される:1,000,000,000,000,000 0,000,000,000,001,010

だから、結果は次のとおりです。デジタル-10

それは次のようになりますか2を乗じたが、別の数がしようとします:

例えば、二進数場合です:1,110,000,000,000,000 0,000,000,000,000,001

そして、その抗コードは次のとおりです。1,001,111,111,111,111 1,111,111,111,111,110

補体は、次のとおりです。1,001,111,111,111,111 1,111,111,111,111,111

すなわち、左の結果に1:0,011,111,111,111,111 1,111,111,111,111,110

最も重要な結果は0であるので、結果は2倍想像されていないので、正の数でなければなりません。


それは右である場合には、高一で補足され、その結果は、例えば、通常と同じではありません。

-5 >> 1、我々は、INT、例えば、メモリ内の負の存在に起因は、補体あり、以下を参照してください。

デジタル-5

int型バイナリ元のコードは次のように表現される:1,000,000,000,000,000 0,000,000,000,000,101

そして、その反転は、次のとおりです。1,111,111,111,111,111 1,111,111,111,111,010

補体は、次のとおりです。1,111,111,111,111,111 1,111,111,111,111,011

すなわち、右の結果に:1,111,111,111,111,111 1,111,111,111,111,101(高S.1)

計算結果が反転している:1,111,111,111,111,111 1,111,111,111,111,100

結果は、元のコードのように計算される:1,000,000,000,000,000 0,000,000,000,000,011

だから、結果は次のとおりです。数-3

Javaでは、これは、2 -5 -2で割っ-3が、それらは、変位されるべきです。

さらに、次の例の場合:

-1 >> 1、我々はint型、例えば、メモリ内の負の存在に起因するが補完され、以下を参照してください。

デジタル-1

int型バイナリ元のコードは次のように表現される:1,000,000,000,000,000 0,000,000,000,000,001

そして、その抗コードは次のとおりです。1,111,111,111,111,111 1,111,111,111,111,110

補体は、次のとおりです。1,111,111,111,111,111 1,111,111,111,111,111

すなわち、右の結果に:1,111,111,111,111,111 1,111,111,111,111,111(高S.1)

デジタル-1:だから結果は知っているし、ゆっくりとカウントされません。

だから、-1のために、どんなに右、結果が-1されていない、そしてそれは2で割られている場合、結果は0です。

結論、陽性である場合、シフト動作を使用することが可能である場合、使用することができるのパフォーマンスを向上させることができ、および負の数のために、それを使用しないことが可能である、遠い除算結果からです。


おすすめ

転載: blog.51cto.com/14479068/2427704
おすすめ