[Java] 연산자 Operator
용어
- 연산자(Operator): 어떠한 기능을 수행하는 기호
- 피연산자(Operand): 연산자의 작업 대상
연산자의 종류
- 단항 연산자:
+,-,(type),++,--,~,! - 이항 산술 연산자:
+,-,*,/,%,<<,>>,>>> - 이항 비교 연산자:
>,<,>=,<=,==,!= - 이항 논리 연산자:
&&,||,&,^,| - 삼항 연산자:
? : - 대입 연산자:
=,operator=
연산자 우선순위
- 괄호의 우선순위가 가장 높음
- 산술 > 비교 > 논리 > 대입
- 단항 > 이항 > 삼항
- 연산자의 연산 진행방향은 왼쪽에서 오른쪽
- 단항, 대입 연산자는 오른쪽에서 왼쪽

단항 연산자 ++ –
++: 증가 연산자. 피연산자의 값 +1--: 감소 연산자. 피연산자의 값 -1
연산자의 위치에 따라 연산 우선순위가 바뀌게 되니 주의할 것.
int n = 1;
int value = n++;
System.out.println(value); //1
int n = 1;
int value = ++n;
System.out.println(value); //2
논리 부정 연산자 !
불리언 타입의 피연산자를 반대로 바꾼다.
boolean flag = true;
flag = !flag;
System.out.println(flag);
int n = 0;
if (n != 1) {
System.out.println("1이 아니네?");
}
-> false
-> 1이 아니네?
비트 전환 연산자 ~
정수를 2진수로 표현했을 때, 1을 0으로 0은 1로 바꾼다. 정수형에서만 사용가능
| 2진수 | 10진수 |
|---|---|
| 00001010 | 10 |
| 11110101 | -11 |
| 11110101 00000001 |
-11 +) 1 |
| 11110110 | -10 |
int binary = 0b1111; // 15, 2진수 리터럴(b)
int octal = 011; // 9, 8진수 리터럴
int hexaDecimal = 0xE; // 14, 16진수 리터럴(x)
System.out.println(~binary); // -16
System.out.println(~octal); // -10
System.out.println(~hexaDecimal); // -15
System.out.println(~100); // -101
비트 시프트 연산자 « » »>
비트를 이동하는 연산자. 2n 으로 곱하거나 나눈 결과와 같으며 곱셈, 나눗셈보다 연산속도가 빠르다.
x << n: (x * 2ⁿ과 같음)x >> n: (x / 2ⁿ과 같음)
System.out.println(8 << 2); // 8 * (2 ^ 2) = 32
System.out.println(8 >> 2); // 8 / (2 ^ 2) = 2
2진법으로 설명하는게 더 쉽다.
«, left shift operator
x의 비트를 n 만큼 왼쪽으로 이동하면서 새로운 자리는 0으로 채운다:
int a = 9; // 1001
a << 2; // 100100
», right shift operator
x의 비트를 오른쪽으로 이동하면서 새로운 자리는 x가 양수일 때 0으로, 음수일 땐 1로 채운다:
int a = 9; // 1001
a >> 2; // 0010, 10진수로 2
int b = -9; // 11111111111111111111111111110111
a >> 2; // 11111111111111111111111111111101, 10진수로 -3
»>, unsigned right shift operator
x의 비트를 오른쪽으로 이동하면서 새로운 자리는 0으로 채운다.:
int a = 9; // 1001
a >>> 2; // 0010, 10진수로 2
int b = -9; // 11111111111111111111111110011100
b >>> 2; // 00111111111111111111111111111101, 10진수로 1073741821
x가 양수인지 음수인지는 판단하지 않으며 양의 정수에 한해 >> 연산자와 결과가 같다.
최상위 비트는 부호를 위한 자리인데 이 자리까지 0으로 채워버린다. 때문에 x가 음수인 경우 >>> 연산 후 양수로 바뀌는 특징이 있음.
비트 연산자 | & ^
피연산자를 비트단위로 연산한다. 실수형을 제외한 모든 기본형에 사용가능
|: OR 연산자. 피연산자 중 어느 한 쪽이 1이면 1&: AND 연산자. 피연산자 양 쪽 모두 1이면 1^: XOR 연산자. 피연산자가 서로 다를 때 1
| x | y | x | y | x & y | x ^ y |
|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 0 | 1 | 1 | 0 | 1 |
| 0 | 0 | 0 | 0 | 0 |
| 식 | 2진수 | 10진수 |
|---|---|---|
| 3 | 5 = 7 | 00000011 00000101 |
3 5 |
| 00000111 | 7 | |
| 3 & 5 = 1 | 00000011 00000101 |
3 5 |
| 00000001 | 1 | |
| 3 ^ 5 = 6 | 00000011 00000101 |
3 5 |
| 00000110 | 6 |