初心者向けのJava講座です。一緒にJavaを勉強しませんか?
はじめてのJava入門初心者向けのJava講座 |
ビット演算子
ビット演算子は2つのビット値を受け取り、AND/ORを使ってビットごとに演算を行い その結果を返します。ビット演算子には次の3つがあります
ビット演算子の種類
- &(AND)
- &(AND)演算子は2つの数値の対応するビット同士を比較し、両方のビットが共に1であれば、
結果のビットも1になります。
対象になるビットが片方、もしくは両方とも0であれば、 結果も0が返されます。 - |(包含OR)
- |(OR)演算子も&(AND)演算子と同じくビット同士を比較するのですが、&(AND)演算子が
両方のビットが共に1であれば、結果に1が返されるのに対し、|(OR)演算子は両方の
、もしくは片方のビットが1であれば結果に1が返されます。
要するにビットが共に0のときだけ0が返されます。 - ^(排他OR,XORとも呼びます)
- ^(排他OR)は2つのビット同士が異なるかどうかを結果に返されます。
両方のビットが異なれば結果に1が返されるわけです
&(AND)
int x = 15; int y = 20; x & y;
上の例で考えていきます。まず、それぞれ x と y の値を2進数にします。
int x = 15; を2進数にします。
2進数にするには15を2で割っていきます。
以下のようになります。
つまり、10進数の15を2進数にすると1111になります。
ここで int x = 15; を2進数にします。
int型の範囲は32bitでした。すなわちint x = 15;を2進数にすると以下のようになります。
0000 0000 0000 0000 0000 0000 0000 1111
int y = 20; を2進数にします。
これも2で割っていくと以下のようになります。
10進数の20を2進数にすると以下のようになります。10100
int y = 20;を2進数にすると以下のようになります。0000 0000 0000 0000 0000 0000 0001 0100
x & y; の求め方
int x = 15; int y = 20;を2進数にすることができました。
ここで&演算子について見ていきます。
&演算子とは最初に説明したとおり
&(AND)演算子は2つの数値の対応するピット同士を比較し、両方のピットが共に1であれば、結果のピットも1(true)になります。対象になるピットが片方、もしくは両方とも0(falseであれば、
結果も0が返されます。
int x = 15; とint y = 20;の2進数表記はこれでした
0000 0000 0000 0000 0000 0000 0000 11110000 0000 0000 0000 0000 0000 0001 0100
&演算子はともにビット値が1なら1になるので、この場合は青字の部分だけ1になります。
つまりint x = 15;
int y = 20;
x & y;の値は
0000 0000 0000 0000 0000 0000 0000 0100になります。
x & yを10進数に戻します
2進数表記は
0000 0000 0000 0000 0000 0000 0000 0100
でした。これを元の10進数に直したいと思います。0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
になり
2X2=4になります。したがって
x & y の値は4になります。
Sponsored link
|(包含OR)
int a = 25; int b = 17; a | b;
上の例で考えていきます。まず、それぞれ a と b の値を2進数にします。
int a = 25;を2進数にします
これも2で割っていくと以下のようになります。
11001
つまりint a = 25; は以下のようになります。0000 0000 0000 0000 0000 0000 0001 1001
int b = 17;を2進数にします
これも2で割っていくと以下のようになります。
つまり10進数の17を2進数表記で表すと以下のようになります。10001
つまりint b = 17; は以下のようになります0000 0000 0000 0000 0000 0000 0001 0001
a | b; の求め方
int a = 25;int b = 17;を2進数にすることができました。
ここで|演算子について見ていきます。
|演算子とは最初に説明したとおり
|(OR)演算子も&(AND)演算子と同じくビット同士を比較するのですが、&(AND)演算子が
両方のビットが共に1であれば、結果に1が返されるのに対し、|(OR)演算子は両方の
、もしくは片方のビットが1であれば結果に1が返されます。
要するにビットが共に0のときだけ0が返されます。
0000 0000 0000 0000 0000 0000 0001 1001
0000 0000 0000 0000 0000 0000 0001 0001
つまり
int a = 25;int b = 17;
a | b;の値は
0000 0000 0000 0000 0000 0000 0001 1001になります。
a | b を10進数に戻します
int a = 25;
int b = 17;
a | b;
の2進数表記はこれでした0000 0000 0000 0000 0000 0000 0001 1001
これを10進数に直したいと思います。0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
となり
2X2X2X2=162X2X2=8
1
16 + 8 + 1 = 25になります。
したがってa | b の値は25になります。Sponsored link
大容量無制限レンタルサーバー【X2】利用者のみドメインが激安
選べるプランとOS!さくらのVPS
^(排他OR)
int c = 11; int d = 19; a ^ b;
上の例で考えていきます。まず、それぞれ c と d の値を2進数にします。
int c = 11;を2進数にします
これも2で割っていくと以下のようになります。
つまり10進数の11を2進数表記で表すと以下のようになります。1011
つまりint c = 11; は以下のようになります0000 0000 0000 0000 0000 0000 0000 1011
int d = 19;を2進数にします
これも2で割っていくと以下のようになります。
つまり10進数の19を2進数表記で表すと以下のようになります。10011
つまりint d = 19; は以下のようになります0000 0000 0000 0000 0000 0000 0001 0011
c ^ d の求め方
int c = 11;int d = 19;を2進数にすることができました。
ここで^演算子について見ていきます。
^演算子とは最初に説明したとおり
^(排他OR)は2つのビット同士が異なるかどうかを結果に返されます。
両方のビットが異なれば結果に1が返されるわけです。
0000 0000 0000 0000 0000 0000 0000 1011
0000 0000 0000 0000 0000 0000 0001 0011
つまり
int c = 11;int d = 19;
c | d;の値は
0000 0000 0000 0000 0000 0000 0001 1000になります。
c ^ d のを10進数に戻します
int c = 11;
int d = 19;
c ^ d;
の2進数表記はこれでした0000 0000 0000 0000 0000 0000 0001 1000
これを10進数に直したいと思います。0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
となり
2X2X2X2 = 162X2X2 = 8
16 + 8 = 24
したがって c ^ d の値は24 となります。 では、今までのことをサンプルプログラムで確認したいと思います。サンプルプログラム(Sample18.java)
class Sample18{ public static void main(String args[]){
int x = 15,y=20,a =25,b=17,c = 11,d = 19;
System.out.println("x & y =" + (x & y)); System.out.println("a | b =" + (a | b)); System.out.println("c ^ d =" + (c ^ d)); } }
プログラムをコピーする場合すべて選択をクリックしてください。
Sponsored link
コンパイル・実行してみます。
実行結果からも確認出来たと思います。