ビット演算子紹介(二):Javaビット演算子
6592 ワード
Java言語には7つのビット操作演算子があります.これらの演算子は、long、int、short、char、byteを含む整数オペランドにのみ使用できます.ここで、JavaはC/C++に対してビット演算子">>>>"が1つ増え、整数オペランドもbyteタイプ(C/C++にはbyteタイプ整数がない)が1つ増え、オペランドにはunsignedタイプ整数がないことに注意してください.
次はJavaビット操作演算子のリストです.演算子の優先度は上から下へ減少しますが、<,>>>>の優先度は同じです.
Javaビット演算子
オペレータ
機能
使用法
~
位求反
~expr
<<
左に移動
expr1 << expr2
>>
記号付きで右に移動し、左に空いているビットを元の一番左の0または1で埋めます.
expr1 >> expr2
>>>
符号なしで右に移動、すなわち左に空いているビットを0で埋めます.
expr1 >>>expr2
&
ビットと
expr1 & expr2
^
位異或
expr1 ^ expr2
|
ビットまたは
expr1 | expr2
コードの例は次のとおりです.
実行結果は次のとおりです.
~z=4
x&y=1
x^y=6
x|y=7
z<<1=-10
z>>1=-3
z>>>1=2147483645
最初の4つの結果については、説明を省略し、私のブログ「ビット演算子(一):C/C++ビット演算子」を参照してください.次の3つの結果について、私の説明は以下の通りです.
z=-5であり、符号化は(11111111111 11111111 11111111 11111011)
11111111 11111111 11111111 11111011 <<1
= 11111111 11111111 11111111 11110110
11111111 11111111 11111111 11111011 >>1
= 11111111 11111111 11111111 11111101
11111111 11111111 11111111 11111011 >>>1
= 01111111 11111111 11111111 11111101
次はJavaビット操作演算子のリストです.演算子の優先度は上から下へ減少しますが、<,>>>>の優先度は同じです.
Javaビット演算子
オペレータ
機能
使用法
~
位求反
~expr
<<
左に移動
expr1 << expr2
>>
記号付きで右に移動し、左に空いているビットを元の一番左の0または1で埋めます.
expr1 >> expr2
>>>
符号なしで右に移動、すなわち左に空いているビットを0で埋めます.
expr1 >>>expr2
&
ビットと
expr1 & expr2
^
位異或
expr1 ^ expr2
|
ビットまたは
expr1 | expr2
コードの例は次のとおりです.
1
public
class
BitOperation {
2
public
static
void
main(String[] args) {
3
int
x
=
3
,y
=
5
,z
=-
5
;
4
System.out.println(
"
~z=
"
+
(
~
z));
5
System.out.println(
"
x&y=
"
+
(x
&
y));
6
System.out.println(
"
x^y=
"
+
(x
^
y));
7
System.out.println(
"
x|y=
"
+
(x
|
y));
8
System.out.println(
"
z<<1=
"
+
(z
<<
1
));
9
System.out.println(
"
z>>1=
"
+
(z
>>
1
));
10
System.out.println(
"
z>>>1=
"
+
(z
>>>
1
));
11
}
12
}
実行結果は次のとおりです.
~z=4
x&y=1
x^y=6
x|y=7
z<<1=-10
z>>1=-3
z>>>1=2147483645
最初の4つの結果については、説明を省略し、私のブログ「ビット演算子(一):C/C++ビット演算子」を参照してください.次の3つの結果について、私の説明は以下の通りです.
z=-5であり、符号化は(11111111111 11111111 11111111 11111011)
11111111 11111111 11111111 11111011 <<1
= 11111111 11111111 11111111 11110110
11111111 11111111 11111111 11111011 >>1
= 11111111 11111111 11111111 11111101
11111111 11111111 11111111 11111011 >>>1
= 01111111 11111111 11111111 11111101