BACKEND/JAVA
[이것이 자바다] 3장 연산자
석태
2024. 1. 18. 19:02
연산(Operations) : 프로그램에서 데이터를 처리하여 결과를 산출하는 것
연산자(Operator) : 연산에 사용되는 표시나 기호
피연산자(Operand) : 연산되는 데이터
연산식(Expressions) : 연산자와 피연산자를 이용하여 연산의 과정을 기술한 것
연산자는 필요로 하는 피연산자의 수에 따라 구분된다.
부호 연산자와 증감 연산자가 하나만을 요구하는 단항 연산자
++X;
단항 연산자와 삼항 연산자 이외의 연산자는 두 개이 피연산자를 요구하므로 이항 연산자
X + Y;
조건 연산자(삼항 연산자) : 조건식, A, B와 같이 세 개의 피연산자가 필요하는 삼항 연산자
(sum>90) ? "A" : "B";
식을 해석해보면 sum이 90보다 크면 A 아니면 B -> if-else문
* 연산 방향과 연산 우선 순위
| 연산자 | 연산 방향 | 우선순위 |
| 증감(++,--), 부호(+,-), 비트(~), 논리(!) | ← | 높음 |
| 산술(*, /, %) | → | |
| 산술(+, -) | → | |
| 쉬프트(<<. >> , >>>) | → | |
| 비교(<, >, <=, >=, instanceof) | → | |
| 비교(==, !=) | → | |
| 논리(&) | → | |
| 논리(^) | → | |
| 논리(|) | → | |
| 논리(&&) | → | |
| 논리(||) | → | |
| 논리(?:) | → | |
| 대입(=, +=, -=, *=, /=, %=, &=,^=, |=,<<=, >>=, >>>=) | ← | 낮음 |
연산자 방향과 우선순위를 정리하면
1. 단항, 이항, 삼항 연산자 순으로 우선순위를 가진다.
2. 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 가진다.
3. 단항과 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽으로 진행된다.
4. 복잡한 연산식에는 괄호()를 사용해서 우선순위를 정한다.
* 증감 연산자(++,--)
| 연산식 | 설명 | |
| ++ | 피연산자 | 다른 연산을 수행하기 전에 피연산자의 값을 1 증가 |
| -- | 피연산자 | 다른 연산을 수행하기 전에 피연산자의 값을 1 감소 |
| 피연산자 | ++ | 다른 연산을 수행한 후에 피연산자의 값을 1 증가 |
| 피연산자 | -- | 다른 연산을 수행한 후에 피연산자의 값을 1 감소 |
다른 연산자 사용 방법과 어떤 출력이 나오는지는 코드로 작성
// 논리 부정 연산자(!) -> true는 false , flase는 true로
boolean type = true;
type = !type; // type은 false로 저장된다.
// 비트 반전 연산자(~) 정수 타입 피연산자에만 사용 -> 비트 값으로 표현해서 0을 1로, 1은 0으로
int v1 = 10; // 십진수(10)
int v2 = ~v1; // 십진수(-11)
int v3 = ~v1 +1; // 십진수(-10)
* 논리 연산자(&&,||,&,|,^,!)
논리 연산자의 피연산자는 boolean 타입만 사용
| 구분 | 연산식 | 결과 | 설명 | ||
| AND (논리곱) |
true | && 또는 & |
true | true | 피연산자 모두가 true일 경우에만 연산 결과는 true |
| true | false | false | |||
| false | true | false | |||
| flase | false | false | |||
| OR (논리합) |
true | || 또는 | |
true | true | 피연사자 중 하나만 true이면 연산 결과는 true |
| true | false | true | |||
| false | false | true | |||
| false | true | false | |||
| XOR (베타적논리합) |
true | ^ | true | false | 피연산자가 하나는 true이고 다른 하나가 false일 경우에만 연산 결과는 true |
| true | false | true | |||
| false | true | true | |||
| false | false | false | |||
| NOT (논리부정) |
! | true | false | 피연산자의 논리값을 바꿈 | |
| false | true | ||||
* 비트 이동 연산자(<<, >> , >>>)
정수 데이터의 비트를 좌측 또는 우측으로 밀어서 이동시키는 연산을 수행
| 구분 | 연산식 | 설명 | ||
| 이동(쉬프트) | a | << | b | 정수 a의 각 비트를 b만큼 왼쪽으로 이동(빈자리는 0으로 채운다.) |
| a | >> | b | 정수 a의 각 비트를 b만큼 오른쪽으로 이동 (빈자리는 정수 a의 최상위 부호 비트(MSB)와 같은 값으로 채워진다.) |
|
| a | >>> | b | 정수 a의 각 비트를 b만큼 오른쪽으로 이동(빈자리는 0으로 채운다.) | |
* 삼항 연산자(? :)
세 개의 피연산자를 필요로 하는 연산자
? 앞의 조건식에 따라 콜론(:) 앞뒤의 피연산자악 선택된다고 해서 조건 연산식이라고 부르기도 한다.
조건식 ? 값 또는 연산식1 : 값 또는 연산식2
조건식이 true일 경우 1번 값 또는 연산식
조건식이 false일 경우 2번 값 또는 연산식
예시
int score = 95;
char grade;
if(score>90){
grade = 'A';
}else{
grade = 'B';
}
///////////////////////////////////////////////////////////
// 해당 식을 삼항 연산자로 변경해보면
int score = 95
char grade = (score>90) ? 'A' : 'B';
if-else문을 삼항 연산자를 이용해서 간단하게 바꿀 수 있다.