あなたは、Java、ビット演算子を知って取得したい場合は、最初に詳細を見ている前に、バイナリ算術を知ってもらう必要があります バイナリ算術-バイナリと小数の変換を
Javaではビット演算子は次のとおりです。&(ビット単位と)、|(ビット単位OR)、^(ビット単位の排他的論理和)>>(右シフト)、<<(左シフト)、〜(反転)、 >>>(符号なし右シフト)
さんが一つ一つを紹介しましょう:
&(ビット単位のAND)
int型 I = 5&2 。 int型 J = 7&3 ; System.out.println( "I =" + I); // I = 0 のSystem.out.println( "J =" + J); // J = 3
ビット単位のルールとバイナリ第一の側面に変換された後、最終的な値を計算し、演算ルール" すべての変更0 0 "、即ち、1&1 = 0 = 1,1&0,0&0,0&1 = 0 = 0
バイナリバイナリ10,5 101,2 5&2&10は、演算の規則に従って0の最終値を得、101、010&0101補体不十分ビットで0小数であります
7 111,3 11,7&ある3 111 011、計算規則011に基づいて得られた最終値のバイナリAは、3を10進数に変換されます
|(ビット演算OR)
int型私= 6 | 2 。 int型 J = 5 | 3 。 System.out.println( "i =" + I)。// I = 6 のSystem.out.println( "J =" + J)。// J = 7
ビット単位OR第1の2値に変換されたルールの両側の操作、算術規則は" すべて1は1になり、"すなわち1 | = 1,1 1 | = 0 1,0 | = 1,0 1 | 0 = 0
バイナリバイナリ6 110,2 10,6 | 2が110である| 010、計算規則110に基づいて得られた最終的な値は、小数点以下6
バイナリバイナリ11,5 5の101,3 | 3が101である| 011は、計算規則111に基づいて得られた最終の値、すなわち、10進数です
^(ビット単位の排他的論理和)
int型私= 7 ^ 3 。 int型 J = 5 ^ 2 。 System.out.println( "i =" + I)。// I = 4 のSystem.out.println( "J =" + J)。// J = 7
ビット単位の定義により、排他的または数字1であるように同じではない、1 = 1 ^ 0,1 ^ 1,0 ^ 1 = 0 = 0 = 0 ^ 1,0の計算ルール
11の7 111,3バイナリバイナリ同等、ルール100の計算結果に基づいて、7 ^ 3 111 011、小数4
10の5 101,2バイナリバイナリ同等、5、2 ^ 101 ^ 010、結果111、小数7
<<(左)
int型 I = 2 << 3 。 int型 J = 5 << 2 。 System.out.println( "i =" + I)。// 私は= 16 のSystem.out.println( "J =" + J)。// J = 20
左側は左側にバイナリ値の実効値であり、右の値をシフト「<<」記号<< 2 3 2のビット数は左側にバイナリ3の実効値、右の補数0であります
3ビット、小数16によって残さ2バイナリ0000 0010 0001 0000
2ビット、小数20によって残さ5バイナリ00000101、00010100
>>(右)
int型私= 9 >> 2 。 int型 J = 15 >> 3 。 System.out.println( "i =" + I)。// I = 2 のSystem.out.println( "J =" + J)。// J = 1
今すぐ右に左の反対側は、右、左補正の数0〜Nビットシフトである、1は負任さ
9右に2ビット、00000010によってバイナリ00001001、小数2
15 0000 1111バイナリ、右3、0000 0001、小数1
〜(反転)
int型私=〜5 ; int型 J =〜8 ; System.out.println( "i =" + I)。// I = -6 のSystem.out.println( "J =" + J)。// J = -9
否定は1に0,0にバイナリ1に変換された後
バイナリ0,000,000,000,000,101 5 0000 0000 0000 0000は、1,111,111,111,111,111 1,111,111,111,111,010を否定、小数の値を反転し-6
実際には、-1の実施例では、スコア虚軸、及び中間点0のより良い理解は、オーバーラップフォールディングの同じ位置の中心点の反転値であり、単に逆数を反転マイナス1であります
>>>(符号なし右シフト)
int型私= 5 >>> 2 。 int型 J = -5 >>> 2 。 System.out.println( "i =" + I)。// I = 1 のSystem.out.println( "J =" + J)。// J = 1073741822
正の右の数の計算における符号なし右シフトとは差が計算された負ことを除いて、存在しません
-5バイナリ>>二00111111111111 1,111,111,111,111,111 10は0を埋める左右(すでに述べた負方法を変換する前に)1,111,111,111,111,111 1,111,111,111,111,011であるが、中に任さ1
>>:参加が正である場合にハイレベルがS.1の左側に否定的である場合、次に高いビット0、右シフト演算、デジタル演算を締結
>>>:符号なし右シフト演算、関係なく、コンピューティングに関わる数値の正または負である、我々は0までの高残されています