연산을 수행하는 기호
연산자(operator) 연산을 수행하는 기호(+, -, *, /)
피연산자(operand) 연산자의 작업 대상(변수, 상수, 리터럴, 수식)
x+3 --> x, 3 : 피연산자, + : 연산자
- 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다.
- 단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다.
- 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽
- 두 피연산자의 타입을 같게 일치시킨다
long + int = long + long
float + int = float + float- 피연산자의 타입이 int보다 작은 타입이면 int로 변환
byte + short = int + int
char + short = int + int
증가 연산자(++) 피연산자의 값 1 증가
감소 연산자(--) 피연산자의 값 1 감소
일반적으로 단항연산자는 피연산자 왼쪽에 위치하지만 증가연산자는 양쪽 모두 가능
왼쪽이라면 전위형, 오른쪽이라면 후위형이라고 한다
전위형 : 값이 참조되기 전에 증가 j = ++i;
후위형 : 값이 참조된 후에 증가
전위형 후위형 차이점
int i = 5, j = 5;
System.out.println(i++); // 5
System.out.println(++j); // 6
System.out.println(i, j); // i = 6, j = 6
위와 같이 전위형은 참조 전에 값이 증가하고 후위형은 참조된 후에 값이 증가한다
피연산자의 부호를 반대로 변경한 값 반환 (양수 > 음수, 음수 > 양수)
+는 사실 쓸 일이 없으며 -만 주로 쓰인다
int i = -10;
i = +i;
System.out.println(i); // -10
i = -10;
i = -i;
System.out.println(i); // 10
프로그래밍에서 가장 많이 사용되는 연산자
위 순서대로 더하기, 빼기, 곱하기, 나누기, 나머지
곱셈, 나눗셈이 우선순위가 높고 그다음이 덧셈 뺄셈
참이면 true 거짓이면 false를 결과로 반환한다
> : 좌변 값이 크면 true, 아니면 false
< : 좌변 값이 작으면 true, 아니면 false
>= : 좌변 값이 크거나 같으면 true, 아니면 false
<= : 좌변 값이 작거나 같으면 true, 아니면 false
== : 두 값이 같으면 true, 아니면 false
!= : 두 값이 다르면 true, 아니면 false
- 문자열을 비교할 때는 비교 연산자 '==' 대신 equals()라는 메서드를 사용해야 한다.
- 비교연산자는 두 문자열이 완전히 같은 것인지 비교할 뿐이므로, 문자열의 내용이 같은지 비교하기 위해서는 equals()를 사용해야한다
- 그 이유는 문자열은 String객체이기에 서로 다른 객체이기 때문
만일 대소문자 구별하지않고 비교하고 싶다면 equals() 대신 equalsIgnoreCase()를 사용
||(OR결합) 피연산 중 어느 한 쪽만 true이면 true를 결과로 얻는다
&&(AND결합) 피연산자 양쪽 모두 true이어야 true를 결과로 얻는다
| (OR연산자) 피 연산자 중 한 쪽의 값이 1이면 1을 결과로 얻는다, 그 외는 0
& (AND연산자) 피 연산자 양 쪽의 값이 1이면 1을 결과로 얻는다, 그 외는 0
^ (XOR 연산자) 피 연산자의 값이 서로 다를 때만 1을 얻는다, 같으면 0
~ (비트 전환 연산자) 1이면 0, 0이면 1로 바꾼다
<<, >> (쉬프트 연산자) 피연산자의 각 자리를 오른쪽>>, 왼쪽 <<으로 이동
- ex) 8 << 2는 왼쪽 피연산자 10진수의 8의 2진수를 왼쪽으로 2자리 이동
- 10진수의 8은 00001000 을 왼쪽으로 2자리 이동하면 00100이 되고 빈자리는 0으로 채워
- 00100000이 된다
조건식 ? 식1 : 식2
조건식이 참이라면 식1, 거짓이라면 식2
i += 3 -> i = i + 3;
i == 3 -> i = i = 3;
i *= 3 -> i = i * 3;
연산자는 프로그래밍의 기본이고 비트연산자 부분은 사실 잘 쓸 기회가 없었는데 다시한번 정리하면서 진수의 개념을 더욱 더 다질 수 있어서 좋았다
그리고 연산자의 우선순위는 사실 자동으로 해주다보니 그냥 당연하듯이 사용했는데
이번 정리를 통해 다시 한번 짚어볼 수 있는 기회가 좋았다 :)