연산에 사용되는 기호를 연산자(Operator)라 한다.
연산되는 데이터는 피연산자라고 한다.
연산자의 종류
종류 | 연산자 | 연산방향 | 우선순위 | |
부호/증감 | + - | ++ -- | ![]() |
![]() |
산술 | * / % + - | ![]() |
||
시프트 | >> << >>> | ![]() |
||
비교(관계) | > < >= <= == != | ![]() |
||
비트(비트논리) | & | ^ ~ | ![]() |
||
논리 | $$ || ! | ![]() |
||
조건 | ? : | ![]() |
||
대입 | = *= /= += -= &= ^= |= <<= >>= | ![]() |
예외로 비트연산자의 ~와 논리연산자의 !는 1순위에 해당한다.
부호연산자
부호를 유지하거나 변경한다.
int a = 1;
int b = -a; //b=-1
byte c = 1;
byte d = -c; //컴파일 에러 부호변경도 연산이기 때문에 연산하면서 int타입이 된다.
증감연산자
피연산자의 앞이나 뒤에 붙어 증가시키거나 감소시킨다.
int a=1;
a++ //a 1증가
a-- //a 1감소
++a //a 1증가
--a //a 1감소
연산시 ++이 앞에 붙을 경우 증가한 값을 반환하고
뒤에 붙을 경우 증가 전 값으로 연산을 수행하고 증가시킨다.
int a=1;
b = ++a; //b=2, a=2 a증가하고 대입연산
a=1;
b = a++; //b=1, a=2 대입연산하고 a증가
산술연산자
더하기(+), 빼기(-), 곱하기(*), 나누기(/), 나머지(%)로 총 5개이다.
int a = 5;
int b = 3;
int result1 = a + b; // 8
int result2 = a - b; // 2
int result3 = a * b; // 15
int result4 = a / b; // 1
int result5 = a % b; // 2
시프트연산자(비트시프트연산자)
데이터의 비트를 왼쪽 또는 오른쪽으로 이동시킨다.
연산자 | 내용 |
a << b (산술적 시프트) | a의 각 비트를 b번 왼쪽으로 이동, 오른쪽 빈자리는 0으로 채움, 2를 b번 곱한 결과 |
a >> b (산술적 시프트) | a의 각 비트를 b번 오른쪽으로 이동, 왼쪽 빈자리는 최상위 부호비트와 같은 값으로 채움, 2를 b번 나눈 결과 |
a >>> b (논리적 산술적 시프트) |
a의 각 비트를 b번 오른쪽으로 이동, 왼쪽 빈자리는 0으로 채움 |
최상위 부호 비트 음수는 1, 양수는 0
int a = 20;
int b = -8;
System.out.println(a << 2); //80 a를 2비트왼쪽시프트 -> a*2*2=80
System.out.println(a >> 2); //5 a를 2비트오른쪽시프트 -> a나누기4
System.out.println(b >> 2); //-2 b를 2비트오른쪽시프트 -> b나누기4
비교연산자
두 개의 피연산자를 비교하여 true 또는 false를 산출한다. 조건문과 반복문에서 흐름을 제어할 때, 주로 사용된다.
int a = 5;
int b = 3;
System.out.println(a > b); //true
System.out.println(a < b); //false
System.out.println(a >= b); //true
System.out.println(a <= b); //false
System.out.println(a == b); //false
System.out.println(a != b); //false
System.out.println('A'==65) //true
문자열을 비교할 때는 ==, !=가 아닌 equals(), !equals()를 사용한다.
비트논리연산자
연산자 | 의미 | 내용 |
a & b | AND(논리곱) | 두 비트 모두 1이면 1, 아니라면 0 |
a | b | OR(논리합) | 두 비트 모두 0이면 0, 아니라면 1 |
a ^ b | XOR (배타적 논리합) |
두 비트가 다르면 1, 같으면 0 |
~ a | NOT(논리부정) | 1을 0으로, 0을 1로 |
a | b | a & b | a | b | a ^ b | ~ a |
0 | 0 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 0 | 0 |
논리연산자
연산자 | 의미 | 내용 |
&& 또는 & | AND(논리곱) | 피연산자 모두 true면 true, 아니면 false |
|| 또는 | | OR(논리합) | 피연산자 중 하나만 true면 true, 아니면 false |
^ | XOR (배타적 논리합) |
피연산자가 하나만 true이고 다른 하나가 false인 경우 true, 아니면 false |
! | NOT(논리부정) | 피연산자 논리값 변경(true->false, false->true) |
&&와 &의 연산결과는 같지만 과정에서 차이가 존재한다.
- &&는 앞의 연산자가 false라면 바로 false를 산출한다.
- &는 앞의 연산자가 false라도 다른 하나도 확인한 뒤, 결과를 산출한다.
즉, &&가 좀 더 효율적이다. ||와 |도 마찬가지로 ||가 더 효율적이다.
조건연산자
3개의 연산자를 가지며 삼항 연산자(condition ? opr1 : opr2)라고 한다.
condition자리에는 조건식이나 boolean 변수가 온다.
condition이 true면 opr1이 선택되고 false면 opr2가 선택된다.
int a = 5;
int b = 3;
int c = (a>b)?1:-1; //a가 b보다 크기 때문에 c는 1이 된다.
대입연산자
연산자 | |
= (단순 대입 연산자) | a=b라면 b의 값을 a에 대입한다. |
*= /= += -= &= ^= |= <<= >>= (복합 대입 연산자) | a*=b라면 a*b의 값을 a에 대입한다. 다른 복합 대입 연산자도 마찬가지로 연산후에 a에 대입한다. |
int result = 0;
result += 10; // 10
result -= 5; // 5
result *= 5; // 25
result /= 5; // 5
result %= 5; // 0
'JAVA' 카테고리의 다른 글
[JAVA(자바)] Arrays.sort()와 Collections.sort() 차이 (feat. 오름차순, 내림차순) 및 Comparable (0) | 2022.12.27 |
---|---|
[JAVA(자바)] 조건문과 반복문 (2) | 2022.12.25 |
[JAVA(자바)] String.valueOf()와 toString() 차이 (0) | 2022.12.21 |
[JAVA(자바)] 자동타입변환, 강제타입변환, 문자열타입변환 (2) | 2022.12.21 |
[JAVA(자바)] 리터럴이란? (0) | 2022.12.19 |
댓글