이진연산
- 이분법적 요소를 가진 곳에 사용 가능
- 모터의 On, Off나 LED의 점등, 소등에 활용 가능
1. 증감연산자 : 증가 감소 연산자
++ : 증가 연산자. 변수의 값을 1 증가
-- : 감소 연산자. 변수의 값을 1 감소시킴
증감연산자의 위치에 따라 전위, 후휘의 형태로 나뉘어짐
++A : A의 값을 1 증가(전위 연산) -> A = A+1
A++ : A의 값을 1 증가(후위 연산) -> A = A+1 은 동일함
ex) A = 3 일 때,
B = A++; -> B에는 증가되기 전 값인 3이 저장됨, A변수는 4가 됨
B = ++A; -> B에는 증가된 후의 값인 4가 저장되고 A변수에도 4가 저장됨.
--A : A의 값을 1 감소(전위 연산) -> B = A-1
A-- : A의 값을 1 감소(후위 연산) -> B = A-1
2. 대입연산자 : 연산과 저장을 동시에 할 수 있음.
- 왼쪽 변수에 저장되어 있는 값과 연산 후에 결과값을 다시 저장함
- 연산자를 간결하게 표현할 수 있음
ex) A=3, B=2 일 때,
A += B -> A = A+B = 3+2 =5 -> A와 B를 더한 값을 A에 저장
A -= B -> 1
A *= B -> 6 ( A = A * B = 3 * 2 = 6)
A /= B -> 1.5 (A 변수를 반드시 실수 형태로 선언해야 함!)
A %= B -> 1 (A = A%B)
A와 B 모두 정수이더라도 나눗셈을 했을 때는 결과가 실수로 나올 수 있음.
따라서 변수 설정 중요!
비트단위 연산자
1. 비트 논리 연산자
- 정수형 데이터는 2진수(0, 1) 형태로 기억장소에 저장됨
- 비트 단위 연산자는 정수형 데이터에서만 사용함
- 비트 단위 연산자는 2진수나 16진수(0~15) 데이터를 사용하여 적용해야 함.
- 16진수 : 0~9는 숫자로, 10(A), 11(B) ~ 15(F)
A & B -> A와 B의 각 비트끼리 And 연산(비트 and) cf) && 논리And
ex) A에 8비트로 3이 저장되어있으면 0000 0011
B에 8비트로 2가 저장되어있으면 0000 0010
-> A&B -> (둘 다 1일 때만 1, 나머지는 0) = 0000 0010 = 2
A | B -> A와 B의 각 비트끼리 Or 연산(비트 or)
ex) A|B = 0000 0011 = 3
A ^ B -> A와 B의 각 XOR 연산(서로 다를 경우 1, 같을 경우 0)
ex) A ^ B = 0000 0001 = 1
ㄴ> 이항연산
~A -> A의 각 비트를 반전(not) = 1111 1100
ㄴ> 단항연산
2. 비트 시프트 연산자
- 정수형 데이터를 지정한 비트만큼 왼쪽 또는 오른쪽으로 이동시킴
- 왼쪽으로 한 번 시프트 한 경우 2를 곱한 결과와 동일
- 오른쪽으로 한 번 시프트 한 경우 2로 나눈 결과와 동일
A<<B : A를 B비트만큼 왼쪽으로 이동시키고 오른쪽 비트는 0으로 채움
ex) 바이트 타입으로 A변수에 1 저장.
A : 0000 0001 -> 1
-> A<<1 : 0000 0010 -> 2
-> A<<2 : 0000 0100 -> 4
-> A<<3 -> 8
-> A<<4 -> 16
A>>B : A를 B비트만큼 오른쪽으로 이동시키고 좌측 비트는 양수일 경우 0, 음수일 경우 1로 채움
ex) A = 0000 0100 -> 4 일 때,
-> A>>1 : 0000 0010 -> 2
음수면 1
A>>>B : A를 B비트만큼 오른쪽으로 이동시키고 좌측 비트는 항상 0으로 채움
(양, 음수 따지지 않고)
증감 연산자 사용 예)
public class Exam5_1 {
public static void main(String[] args) {
int iNum = 10, result;
result = ++iNum1;
System.out.println(result); -> 11
System.out.println(iNum1); -> 11
result = iNum1++; -> iNum의 값이 다음 라인부터 +1됨. result에는 증가 전인 11 저장.
System.out.print(result); -> 11
System.out.print(iNum1); -> 12
}
}
대입연산자 사용 예)
public class Exam5_2 {
public static void main(String[] args) {
int result = 10;
result += 1; //result = result + 1;
System.out.println(result); -> 11
result -=1;
System.out.println(result); -> 10
}
}
비트단위 연산자 사용 예)
public class Exam5_1 {
public static void main(String[] args) {
int iNum = 7, iNum2 = 5, result;
result = iNum1 & iNum2;
// 111 101
// 101
System.out.println(result); -> 5
result = iNum1 | iNum2; -> 111
System.out.println(result); -> 7
result = iNum1 << 2;
// 0011100
System.out.print(result); -> 7*2^2 = 28
result = iNum1 >> 2;
System.out.print(result); -> 7/2^2 = 1.75이니까 결과값은 정수 1
}
}
'프로그래밍 > 자바(java) 융합개발자 2차' 카테고리의 다른 글
[취성패] 자바 배우기 - 선수학습(반복문-for, while구문) (0) | 2020.12.12 |
---|---|
[취성패] 자바 배우기 - 선수학습(조건분기문-if else, switch case) (0) | 2020.12.12 |
[취성패] 자바 배우기 - 선수학습(연산자I-논리, 조건) (0) | 2020.12.12 |
[취성패] 자바 배우기 - 선수학습(연산자I-산술, 관계) (0) | 2020.12.11 |
[취성패] 자바 배우기 - 사전학습(변수와 상수) (0) | 2020.12.10 |