Javaのシフト操作メソッド(<<、>>、>>>)

怪我咯
リリース: 2017-06-30 10:31:08
オリジナル
1864 人が閲覧しました

以下のエディターは、Java<<、>>、>>> のシフト操作メソッドに関する記事を提供します。編集者はこれがとても良いものだと思ったので、皆さんの参考として今から共有します。エディターに従って見てみましょう

<<、符号付き左シフトは、オペランドのバイナリ全体を指定された桁数だけ左にシフトし、下位ビットを 0 で埋めます。

int leftShift = 10;
System.out.println("十进制:" + leftShift + ", 二进制:" + Integer.toBinaryString(leftShift));
int newLeftShift = letfShift << 2;
System.out.println("左移2位后十进制:" + newLeftShift + ", 左移2位后二进制" + Integer.toBinaryString(newLeftShift)); //正整数x左移n位后的十进制结果,x = x * 2^n
ログイン後にコピー

上記は正の整数であり、演算結果は以下の通りです。

次に、負の数を 2 ビット左シフトするとどうなるかを見てみましょう。演算の結果は次のようになります。

二進数 -10 にはなぜ 1 がたくさんあるのでしょうか?よく数えてみると、ちょうど 32 ビットあります。まず理解する必要があるのは、Java の負の数値は 2 の補数形式 (補数 = 補数 + 1) で格納されるということです。2 進数 10 は 1010 で、その補数は 0101 です。1 を加算すると補数は 0110 になります。では、なぜ余分な 1 がたくさんあるのでしょうか?これは、Java では int 型が 8 バイト、つまり 32 ビットを占めるためです。10 の元のコードの上位ビットはすべて 0 であり、その補数コードの上位ビットは当然 1 になります。したがって、演算全体が 2 ビット左にシフトされ、下位ビットは 0 で埋められます。最終的な演算結果は x = (|x| + 2^n) になります。

>>、符号付き右シフトは、オペランドのバイナリ値全体を指定された桁数だけ右にシフトし、整数の上位ビットに 0 を埋め込み、負の数の上位ビットに 1 を埋め込みます (負の数の符号は変更されません)。


int rightShift = 10;
System.out.println("十进制:" + rightShift + ", 二进制:" + Integer.toBinaryString(rightShift));
int newRightShift = rightShift >> 2;
System.out.println("右移2位后十进制:" + newRightShift + ", 右移2位后二进制" + Integer.toBinaryString(newRightShift));  //右移n位后的运算数x十进制结果,x = x / 2
ログイン後にコピー


上記は正の整数であり、演算結果は以下の通りです。

次に、負の数を右に 2 ビットシフトするとどうなるかを見てみましょう。演算の結果は次のようになります。

負の数の符号付き右シフトの基本原理は左シフトと同じです。違いは結果の計算です。これは符号付き右シフトであるため、右シフトの最終結果は次のようになります。 -1。要約すると、オペランドが偶数の場合、演算結果は x = -(|x| / 2) になります。オペランドが奇数の場合、演算結果は x = -(|x| / 2) となります。 ) - 1.

> 右シフトと > > 符号付き右シフトの計算結果は同じです

int rightShift = 10;
System.out.println("十进制:" + rightShift + ", 二进制:" + Integer.toBinaryString(rightShift));
int newRightShift = rightShift >>> 2;
System.out.println("右移2位后十进制:" + newRightShift + ", 右移2位后二进制" + Integer.toBinaryString(newRightShift));  //右移n位后的云算数x十进制结果,x = x / 2
ログイン後にコピー

上記は正の整数であり、演算結果は次のようになります。

次に、負の整数を見てみましょう。演算結果は次のようになります。

符号なしシフト後のバイナリと符号付きシフト後のバイナリは同じように見えますが、結果は大きく異なります。符号付き右シフト演算は、実際には符号、つまり上位ビットを無視した算術演算であることに注意してください。一律に0を埋めます。

以上がJavaのシフト操作メソッド(<<、>>、>>>)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!