01. 식과 연산자
◆ 산술, 논리, 비트, 시프트 연산자
◆ 비교, 대입, 증감 연산
# 식과 연산자
º 연산 : 주어진 식을 계산하여 결과를 얻어내는 과정
# 연산자 우선 순위
º 같은 우선순위의 연산자
- 왼쪽에서 오른쪽으로 처리
- 예외) 오른쪽에서 왼쪽으로
-> 대입 연산자, --, ++, +, -, !, 형 변환은 오른쪽에서 왼족으로 처리
º 괄호는 최우선순위
- 괄호가 다시 괄호를 포함한 경우는 가장 안쪽의 괄호부터 먼저 처리
# 산술 연산자
+ | 더하기 |
- | 빼기 |
* | 곱하기 |
/ | 나누기 |
% | 나머지 |
# 비트 연산자
º 피 연산자의 각 비트들을 대상으로 하는 연산
a & b | a와 b의 각 비트들의 AND 연산 두 비트 모두 1일 때만 1이 되며 나머지는 0 |
a | b | a와 b의 각 비트들의 OR 연산 두 비트 모두 0일 때만 0이 되며 나머지는 1 |
a ^ b | a와 b의 각 비트들의 XOR 연산 두 비트가 서로 다르면 1, 같으면 0 |
~ a | 단항 연산자로서, a의 각 비트들에 NOT 연산 1을 0으로, 0을 1로 변환 |
# 시프트 연산자
a >> b | a의 각 비트를 오른쪽으로 b 번 시프트한다. 최상위 비트의 빈자리는 시프트 전의 최상위 비트로 다시 채운다. 산술적 오른쪽 시프트 |
a >>> b | a의 각 비트를 오른쪽으로 b 번 시프트한다. 그리고 최상위 비트의 빈자리는 0으로 채운다 논리적 오른쪽 시프트 |
a << b | a의 각 비트를 왼쪽으로 b 번 시프트한다. 그리고 최하위 비트의 빈자리는 0으로 채운다. 산술적 왼쪽 시프트 |
Tip : 산술적 시프트와 논리적 시프트
º 산술적 오른쪽 시프트
- >>는 1비트 오른쪽으로 시프트할 때마다 2로 나누기 하는 결과
º 산술적 왼쪽 시프트
- << 연산자는 1비트 시프트할 때마다 2로 곱하는 결과
- 음수(최상위 비트가 1)는 시프트 결과 최상위 비트가 0인 양수가 되는 오버플로 발생 가능 주의
º 논리적 오른쪽 시프트
- >>>는 시프트 시 최상위 비트에 항상 0이 삽입
- 나누기의 산술적 효과가 나타나지 않음
º byte, short, char 타입의 시프트 연산 시 주의 사항
- int타입으로 변환되어 연산이 일어나므로 원하지 않는 결과 발생 가능
# 비교 연산자
a < b | a가 b보다 작으면 true 아니면 false |
a > b | a가 b보다 크면 true 아니면 false |
a <= b | a가 b보다 작거나 같으면 true 아니면 false |
a >= b | a가 b보다 크거나 같으면 true 아니면 false |
a == b | a와 b가 같으면 true 아니면 false |
a != b | a가 b와 같지 않으면 true 아니면 false |
# 대입 연산자
a += b | a = a + b과 동일 |
a -= b | a = a - b과 동일 |
a *= b | a = a * b과 동일 |
a /= b | a = a / b과 동일 |
a %= b | a = a % b과 동일 |
a &= b | a = a & b과 동일 |
a ^= b | a = a ^ b과 동일 |
a |= b | a = a | b과 동일 |
a <<= b | a = a << b과 동일 |
a >>= b | a = a >> b과 동일 |
# 증감 연산자
a++ | a을 먼저 사용한 후에 1증가 |
a-- | a을 먼저 사용한 후에 1감소 |
++a | a을 먼저 1 증가한 후에 사용 |
--a | a을 먼저 1 감소한 후에 사용 |
# 증감 연산자의 순서
º 연산자가 피연산자 뒤에 붙는 경우
int a, b = 4;
a = b++;
//결과 a = 4, b = 5
º 연산자가 피연산자 앞에 붙는 경우
int a, b =4;
a = ++b;
//결과 a = 5, b = 5
# 조건 연산자 ? :
º opr1 ? opr2 : opr3
- 세 개의 피연산자로 구성되어 삼항(ternary) 연산자
- opr1이 true이면 값은 opr2, false이면 opr3
- if-else에 비행 문장이 간결해짐
public class TernaryOperator {
public static void main (String[] args) {
int a = 3, b = 5;
System.out.println("두 수의 차는 " + ((a>b) ? (a-b) : (b-a)));
}
}
'JAVA > 자바 이론' 카테고리의 다른 글
Java | 3-1 반복문과 배열 (0) | 2021.04.12 |
---|---|
Java | 2-2 자바 기본 프로그래밍 (0) | 2021.04.11 |
Java | 1-2 자바 기본 프로그래밍 (0) | 2021.04.11 |
Java | 1-1 자바 기본 프로그래밍 (0) | 2021.04.11 |
Java | 시작 (0) | 2021.04.11 |