はじめに
前回の記事
に続き本記事では「&,|,^」といったビット演算子、三項演算子「?:」について紹介します。
ビット演算子「&」「|」「^」
①「&」
論理積(AND) を取ります。
a=1100、b=0101の場合下記の図のように、
論理積なのでab両方1の桁は1に。
それ以外の桁は、両方0もしくは片方が0なので0になります。
4桁目 | 3桁目 | 2桁目 | 1桁目 | |
---|---|---|---|---|
a | 1 | 1 | 0 | 0 |
b | 0 | 1 | 0 | 1 |
a & b | 0 | 1 | 0 | 0 |
こちらを実際のプログラムで見てみましょう。
And1.java
public class And1
{
public static void main( String[] args )
{
int a = 12; // 2進数 : 1100
int b = 5; // 2進数 : 0101
System.out.println("a & b :" + String.format("%4s", Integer.toBinaryString(a & b)).replace(" ", "0"));
}
実行結果
a & b :0100
②「|」
論理和(or) を取ります。
a=1100、b=0101の場合下記の図のように、
論理和なのでab両方1の桁はもちろん、片方が1の桁も1になります。
両方0の桁は0になります。
4桁目 | 3桁目 | 2桁目 | 1桁目 | |
---|---|---|---|---|
a | 1 | 1 | 0 | 0 |
b | 0 | 1 | 0 | 1 |
a | b | 1 | 1 | 0 | 1 |
こちらを実際のプログラムで見てみましょう。
Or1.java
public class Or1
{
public static void main( String[] args )
{
int a = 12; // 2進数 : 1100
int b = 5; // 2進数 : 0101
System.out.println("a | b :" + String.format("%4s", Integer.toBinaryString(a | b)).replace(" ", "0"));
}
実行結果
a | b :1101
③「^」
排他的論理和(xor) を取ります。
a=1100、b=0101の場合下記の図のように、
排他的論理和なので片方が1の桁は1になります。
ab両方1の桁、両方0の桁は0になります。
4桁目 | 3桁目 | 2桁目 | 1桁目 | |
---|---|---|---|---|
a | 1 | 1 | 0 | 0 |
b | 0 | 1 | 0 | 1 |
a ^ b | 1 | 0 | 0 | 1 |
こちらを実際のプログラムで見てみましょう。
Xor1.java
public class Xor1
{
public static void main( String[] args )
{
int a = 12; // 2進数 : 1100
int b = 5; // 2進数 : 0101
System.out.println("a ^ b :" + String.format("%4s", Integer.toBinaryString(a ^ b)).replace(" ", "0"));
}
実行結果
a ^ b :1001
三項演算子「?:」
条件式の真偽に応じてそれぞれ異なる値を返す演算子です。
下記の書式で記述します。
条件式 ? 値1 : 値2
条件式がtrueの場合は値1が、falseの場合は値2が返されます。
実際の例でみていきましょう。
scoreが60より大きい場合、「合格」と表示され、
そうでない場合「不合格」と表示されます。
今回scoreは76なので、コンソールには「合格」と表示されます。
ternary.java
import java.util.*;
public class ternary {
public static void main(String[] args) throws Exception {
int score = 76;
String result = score > 60 ? "合格" : "不合格";
System.out.println(result);
}
}
実行結果
合格
読んでいただきありがとうございます。
次回③では「&=,|=,^=,<<=,>>=,>>>=」といった代入演算子について紹介します。(執筆中)