본문 바로가기
JAVA

[JAVA(자바)] 연산자란? (연산자 종류와 우선순위)

by 초이사 2022. 12. 24.

연산에 사용되는 기호를 연산자(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

 

댓글