연산자(Operator)란?
연산자(Operator)
어떠한 기능을 수행하는 기호 (+, -, *, / 등)
피연산자(Operand)
연산자의 작업 대상 (변수, 상수, 리터럴, 수식)
연산자의 종류
단항 연산자
항이 한개인 연산자 : + - (타입) ++ -- ~ !
부호연산자(+, -)와 논리부정연산자(!)
부호연산자(+, -) : '+'는 피연산자에 1을 곱하고 '-'는 피연산자에 -1을 곱한다.
논리부정연산자(!) : true는 false로, false는 true로 피연산자가 boolean일 때만 사용가능
증감연산자 : ++, --
- 증감연산자 (++) : 피연산자의 값을 1 증가시킨다.
- 감소연산자 (--) : 피연산자의 값을 1 감소시킨다.
int num = 1;
System.out.println(++num); // 전위형 : 값을 참조되기 전에 증가시킨다. -> 2
System.out.println(num++); // 후위형 : 값을 참조된 후에 증가시킨다. -> 2
System.out.println(num); // -> 3
비트전환연산자: ~
정수를 2진수로 표현했을 때, 1을 0으로 0은 1로 바꾼다. 정수형에만 사용가능.
이항 연산자
이항연산자는 연산을 수행하기 전에 피연산자의 타입을 일치시킨다.
1. int보다크기가 작은 타입은 int로 변환한다.
(byte, char, short -> int)
2. 피연산자 중 표현범위가 큰 타입으로 형변환 한다.
char + int -> int+int -> int
float+ int -> float + float -> float
long + float -> float + float -> float
float + double -> double + double -> double
byte a =10;
byte b =20; // byte+byte -> int+int -> int
byte c =a+b; // 에러. int값을 byte에 저장 불가
byte c = (byte)a + b; // 에러
byte c = (byte)(a+b); // ok
int a = 1000000; // 1,000,000
int b = 2000000; // 2,000,000
long c = a*b; // c는 2,000,000,000,000? // c는 -1454759936 !!!
// int * int -> int
long c = long(a)*b; // c는 2,000,000,000,000
// long*int -> long*long -> long
산술 연산자
+ - * / %
int num1 = 1;
int num2 = num1 + 2; // 덧셈 연산자 num2 -> 3
int num3 = num2 - 1; // 뺄셈 연산자 num3 -> 2
int num4 = num3 * 3; // 곱셈 연산자 num4 -> 9
int num5 = num4 / 2; // 나눗셈 연산자 num5 -> 4
int num6 = num5 % 3; // 나머지 연산자 num6 -> 1
비트 연산자
쉬프트연산자 : <<., >>, >>>
2^n으로 곱하거나 나눈 결과를 반환한다
곱셉, 나눗셈보다 빠르다
x << n은 x*2^n과 같다.
x >> n은 x/2^n과 같다.
8 << 2은 8*2^2과 같다.
8 << 2은 8/2^2과 같다.
& : 대응되는 비트가 모두 1이면 1을 반환함 (비트 AND 연산)
| : 대응되는 비트 중에서 하나라도 1이면 1을 반환함 (비트 OR 연산)
^ : 대응되는 비트가 서로 다르면 1을 반환함 (비트 XOR 연산)
~ : 비트를 1이면 0으로, 0이면 1로 반전시킴 (비트 NOT 연산, 1의 보수)
비교 연산자
> < >= <= == !=
- 피연산자를 같은 타입으로 변환한 후에 비교한다.
결과 값은 true 또는 false이다. - 기본형(boolean 제외)과 참조형에 사용할 수 있으나
참조형에는 ==와 !=만 사용할 수 있다.
논리 연산자
&& ||
피연산자가 반드시 boolean이어야 하며 연산결과도 boolean이다.
- &&가 ||보다 우선순위가 높다. 같이 사용되는 경우 괄호를 사용하자.
OR연산자(||): 피연산자 중 어느 한 쪽이 truedlaus true이다.
AND연산자(&&): 피연산자 양 쪽 모두 true이면 true이다.
삼항 연산자
a > b ? a : b
대입 연산자
대입 연산자 : =
오른쪽 피연산자의 값을 왼쪽 피연산자에 저장한다.
단, 왼쪽 피연산자는 상수가 아니어야 한다.
int i = 0;
i = i + 3; // i+=3
final in MAX = 3;
MAX = 10; // 에러
연산자의 우선순위
단항 연산자 - > 산술 -> 비교 -> 논리 -> 삼항 -> 대입
상식적으로 생각 !!!
괄호의 우선순위가 제일 높다.
산술 > 비교 > 논리 > 대입
단항 > 이항 > 삼항
연산자의 연산 진행방향은 왼쪽에서 오른쪽(->)이다. 단, 단항/ 대입 연산자만 오른쪽에서 왼쪽(<-)이다.
ex1) -x+3 단항>이항
ex2) x+3*y 곱셈,나눗셈>덧셈,뺄셈
ex3) x+3 > y-2 산술>비교
ex4) x>3 && x<5 비교>논리
ex5) int result = x+y*3; 항상 대입은 맨 끝에
ex6) << , >>, >>>는 덧셈연산자보다 우선순위가 낮다. x << 2+1 == x << (2+1)
ex7) ||,(OR)는 &&,&(AND)보다 우선순위가 낮다. x < -1 || x>3 && x<5 == x < -1 || (x>3 && x<5)
'Programming > Java' 카테고리의 다른 글
| [Java] 반복문이란 ? (0) | 2022.12.31 |
|---|---|
| [Java] 조건문 (0) | 2022.12.31 |
| Scanner & BuffereReader (0) | 2022.12.30 |
| [Java] 문자열이란 ? (0) | 2022.12.29 |
| [Java] 변수란 ? (0) | 2022.12.29 |