연산자와 피연산자
- 연산자 : 계산의 목적이 되는 것. 더하기, 빼기, 곱하기, 나누기 등
- 피연산자 : 계산할 때 계산의 대상이 되는 것. 숫자
연산자의 종류
산술 연산자
사칙 연산 및 비트 연산
사칙 연산 : + (덧셈) - (뺄셈) * (곱셈) / (나눗셈, 몫) % (나머지)
우선순위 연산 적용되어 곱셈, 나눗셈이 덧셈, 뺄셈보다 먼저 수행됨
비트 연산 : << (왼쪽으로 자리수 옮기기) >> (오른쪽으로 자리수 옮기기)
비교 연산자
값의 크고 작음을 비교하거나 같고 다름을 비교하여 참(true)/거짓(false) 값인 boolean 값을 출력한다.
> (크다) < (작다) >= (크거나 같다) <= (작거나 같다) == (같다) != (다르다)
논리 연산자
비교 연산의 결과로 받을 수 있는 boolean 값을 연결하는 연산자
조건을 연결했을 때 boolean 값들을 조합하여 참, 거짓 값인 boolean 값을 출력한다.
참(true), 거짓(false) 값인 boolean 값을 출력한다.
&& (AND, 피연산자 모두 참) || (OR, 피연산자 둘 중 하나라도 참) ! (피연산자의 반대 boolean 값)
대입 연산자
변수를 바로 연산해서 그 자리에서 저장하는 연산자
기본 연산자 =, 다른 연산과 함께 쓰는 복합 대입 연산자 +=, -=, *= 등
+=는 ++과 동일함 (피연산자에 1 더해주기), -=는 --와 동일함 (피연산자에 1 빼주기)
- ++{피연산자} : 연산 전에 피연산자에 1을 더함
- {피연산자}++ : 연산 후에 피연산자에 1을 더함
- --{피연산자} : 연산 전에 피연산자에 1을 뺌
- {피연산자}-- : 연산 후에 피연산자에 1을 뺌
public class Main {
public static void main(String[] args) {
int a = 3;
int b = 4;
int val = ++a + b--; // a 는 연산전에 +1, b 는 연산후에 -1
System.out.println(a); // 4
System.out.println(b); // 3
System.out.println(val); // 8
// 4 + 3 이 7이 나오는 이유
// a 는 val 연산전에 ++ 가 수행되어 4로 연산되었지만
// b 는 val 연산후에 -- 가 수행되어 기존값이 4으로 연산된 후 -- 가 수행됨
기타 연산자
형변환 연산자
괄호 안에 변환할 타입을 넣으면 피연산자의 타입이 변경된다.
int intNumber = 10 + (int)11.5; // 10 + 11
삼항 연산자
비교 연산 결과에 따라 응답할 값을 직접 지정할 수 있는 연산자
삼항 연산자는 3가지 피연산자가 존재하고, 삼항연산자라고 한다.
(조건) ? (참결과) : (거짓결과)
int x = 1;
int y = 2;
boolean b = (x == y) ? true : false;
System.out.println(b); // false
int max = (x > y) ? x : y;
System.out.println(max); // 2
instance of 연산자
클래스와 관련됨. 피연산자가 조건에 명시된 클래스의 객체인지 비교하여 참/거짓을 응답해주는 연산자
(객체명) instance of (클래스명)
연산자 우선순위
산술 > 비교 > 논리 > 대입
연산자 여러개가 함께 있는 연산을 계산할 때는 우선순위가 있다.
우선순위에 따라 최종적인 응답값이 결정된다.
괄호로 감싸주면 괄호 안의 연산이 최우선순위로 계산된다.
산술변환
연산 전에 피연산자의 타입을 일치시키는 것
(둘중에 저장공간 크기가 더 큰 타입으로 일치시킴)
변수 여러개를 연산했을 때 결과값은 피연산자 중 표현 범위가 가장 큰 변수 타입을 가지게 된다.
예) 피연산자 타입이 float보다 작은 long, int, short 타입이면 float로 변환
비트 연산
Bit의 자리수를 옮기는 것을 비트 연산이라고 한다.
<< 왼쪽으로 자리수 옮기기, >> 오른쪽으로 자리수 옮기기
0, 1은 2진수 값이기 때문에 자리수를 왼쪽으로 옮기는 횟수만큼 2의 배수로 곱셈 연산되는 것과 같다.
자리수를 오른쪽으로 옮기는 횟수만큼 2의 배수로 나눗셈 연산되는 것과 같다.
// 비트 연산
// 참고, 3의 이진수값은 11(2) 입니다. 12의 이진수값은 1100(2) 입니다.
System.out.println(3 << 2);
// 3의 이진수값인 11(2) 에서 왼쪽으로 2번 옮겨져서 1100(2) 인 12값이 됩니다.
System.out.println(3 >> 1);
// 3의 이진수값인 11(2) 에서 오른쪽으로 1번 옮겨져서 1(2) 인 1 값이 됩니다.