ビット論理演算子
<概念>
ビット論理演算子はbit単位で論理演算を行い、0と1が被演算子になるため、
2進法を扱うbyte,short,int,longが被演算子にある。
主に通信業界で扱う演算で、メッセージのエラー、bit単位で解釈する際に使われる。
AND (&) 二つの二進法の数が1であれば、演算結果が1になる。その他は0だ。
0 0 1 0 1 1 0 1 = 45
&
0 0 0 1 1 0 0 1 = 25
0 0 0 0 1 0 0 1 =9(結果)
OR(|)二つの二進法の数の中で一つのビットが1であれば、演算結果が1になる。
0 0 1 0 1 1 0 1 = 45
|
0 0 0 1 1 0 0 1 = 25
0 0 1 1 1 1 0 1 = 61 (結果)
XOR(^)二つの二進法の数の中でいつのビットのみ1であれば、演算結果が1になる。その他は0だ。
0 0 1 0 1 1 0 1 = 45
^
0 0 0 1 1 0 0 1 = 25
0 0 1 1 0 1 0 1 = 52(結果)
NOT(~) 演算結果が逆になる。
0 0 1 0 1 1 0 1 = 45
~
1 1 0 1 0 0 1 0 = -46
変数の演算と同様、基本的にint型(32bit)に変換され、演算される。
<実例>
Cには範囲が0~255であるuint8_tタイプのデーターがある。
こちらをjavaに変換するとこのような流れになる。
C 1 0 0 1 1 0 0 0 (136) ----------------------> java 1 0 0 1 1 0 0 0 (-120)
こちらにビット論理演算子を活用すると
byte recieveData = -120;
int unsignedInt = receiveData & 255
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0
&
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0
=136
本来の136に変換される。
このような方法もあるが、javaはByte.toUnsignedInt()コードを提供する。
byte recieveData = -120;
int unsignedInt =Byte.toUnsignedInt(receiveData); //136
https://github.com/HyonHyonKOR/Thisisjava/blob/main/Chapter3/sec09/BitShiftExample.java
ビット移動演算子
1.a << b 整数a左にbほど移動(a*2のb条、右のブランクは0になる)
1<<3 = 1*2^3 = 8
2.a >> b 整数a右にbほど移動(a/2のb条、左のブランクはMSBと同じ値になる)
-8>>3 = -8/8 = -1
3. a >>> b 整数a右にbほど移動(左のブランクは0になる)
https://github.com/HyonHyonKOR/Thisisjava/blob/main/Chapter3/sec09/BitShiftExample2.java
GitHub - HyonHyonKOR/Thisisjava
Contribute to HyonHyonKOR/Thisisjava development by creating an account on GitHub.
github.com
代入演算子
変数+=被演算子 :変数の値に被演算子の値を足した後、変数に代入する。
-=
*=
/=
%=
&=
|=
^=
<<=
>>=
>>>=
等号の前にある算出演算子・ビット演算子により結果値が異なる。
https://github.com/HyonHyonKOR/Thisisjava/tree/main/Chapter3/sec10
条件演算子(三項演算子)
条件式 ? 値もしくは演算式(true) : 値もしくは演算式(false)
package ch03.sec11;
public class ConditionalOperationExample {
public static void main(String[] args) {
int score = 85;
char grade = (score>90) ? 'A':(score>80? 'B':'C');
System.out.println(score + "점은 " +grade +"등급입니다.");
}
}
<result>
85점은 B등급입니다
条演算の方向性と優先順位
代入演算子や単項演算子(符号、増減)、~、!演算子は演算方向が逆だ。
例)a=b=c=5;
c=5 -> b=c -> a=b
優先順位
無()>単項演算子(符号、増減[++,--]、!、~)>算術 > 比較 > 論理> 代入
https://github.com/HyonHyonKOR/Thisisjava/commit/ecd2812044d0e07ad65942e5f6b5042e17f89fe8
Add files via upload · HyonHyonKOR/Thisisjava@ecd2812
HyonHyonKOR committed Jun 26, 2023
github.com
SWITCH
1. switch(変数){case 変数: 命令文 ; break; } ;が一般的なケースだ。
変数のケースをはっきり把握できる際に使えば、else if より綺麗にコードをまとめることができる。
最後のelseはdefault: 命令文が付く。breakはいらない。
2. switchの変数は整数(byte,short,char,int,long)と文字列のみ代入できる。
実数(double, float)は代入できない。
3.breakなしで、綺麗にまとめることもできる。
<単一値>
char grade = 'b'
switch(grade) {
case 'a'"A" -> {System.out.println("優秀会員です。")}
case 'b''B' -> {System.out.println("一般会員です。")}
default -> {System.out.println("ゲストです。")}
}
or
switch(grade) {
case 'a'"A" -> System.out.println("優秀会員です。")
case 'b''B' -> System.out.println("一般会員です。")
default -> System.out.println("ゲストです。")
}
<中括弧の活用>
単一値の場合はー>で値を代入することができ、
中格好を活用する際にはyieldを使用して値を代入することができる。
その場合はdefault; が必須になり、switchの}に;を付ける。
例>
int grade ='b';
int score = switch(grade){
case "A"->100;
case "B" -> {
int result = 100-20;
yield result;
}
default -> 60;
};
System.out.println(score)
'IT自主学習 (2023.05.23~) > Java(2023.05.23~)' 카테고리의 다른 글
プログラミング自主学習 33日目 Continue/全体復習 (0) | 2023.06.28 |
---|---|
プログラミング自主学習 32日目 do-while/break (0) | 2023.06.27 |
プログラミング自主学習 30日目 比較演算子/論理演算子 (0) | 2023.06.25 |
プログラミング自主学習 29日目 ArithmeticExeption・Infinity・Nan (0) | 2023.06.24 |
プログラミング自主学習 28日目 コンソルで変数の値出力/キーボードで変数の値入力/符号・増減演算子/算術演算子/ (0) | 2023.06.23 |