Language/JAVA
연산자 (1)
hshDev
2021. 7. 11. 00:07
연산자 (Operator)
연산자와 피연산자
연산자(Operator): 연산을 수행하는 기호 (+, -, *, /, 등)
피연산자(Operand): 연산자의 작업 대상 (변수, 상수, 리터럴, 수식)
식과 대입연산자
식(Expression): 연산자와 피연산자를 조합하여 계산하고자 하는 것을 표현한 것
평가(Evaluation): 식을 계산하여 결과를 얻는 것. 하나의 식을 평가하면, 하나의 결과를 얻는다.
대입 연산자(=): 식의 평가결과를 변수와 같이 값을 저장 할 수 있는 공간에 결과를 저장할때 사용.
연산자의 종류
종류 | 연산자 | 설명 |
---|---|---|
산술 연산자 | +, -, *, /, %, <<, >> | 사칙연산과 나머지(%) 연산. bit shift 연산. |
비교 연산자 | >, <, >=, <=, ==, != | 크고 작음과 같고 다름을 비교. |
논리 연산자 | &&, ||, !, &, |, ^, ~ | AND와 OR으로 조건을 연결. '|'은 OR연산자, '&'은 AND연산자, '^'은 XOR연산자, '~'은 NOT연산자 |
대입 연산자 | = | 우변의 값을 좌변에 저장. |
기 타 | (type), ? :, instanceof | 형변환 연산자, 삼항연산자, instanceof 연산자 |
- 삼항 연산자는 오직 '? :' 뿐이다.
연산자의 우선순위와 결합규칙
종류 | 결합규칙 | 연산자 | 우선순위 |
---|---|---|---|
단항 연산자 | ← | ++, --, +, -, ~, !, (type) | 높음 |
산술 연산자 | → | *, /, % | |
→ | +, - | ||
→ | <<, >>, >>> | ||
비교 연산자 | → | <, >, <=, >=, instanceof | |
→ | ==, != | ||
논리 연산자 | → | & | |
→ | ^ | ||
→ | | | ||
→ | && | ||
→ | || | ||
삼항 연산자 | → | ? : | |
대입 연산자 | ← | =, +=, -=, *=, /=, %= <<=, >>=, &=, ^=, |= |
낮음 |
Shift 연산자 (<< , >> , >>>)
- 정수형데이터에서만 사용가능하고 2진수로 표현했을때 각 자리를 오른쪽 또는 왼쪽으로 이동
- 오른쪽으로 n비트 이동하면 피연산자를 2의 n승으로 나눈 것과 같은 결과이다.
- '<<' 연산자의 경우, 피연산자의 부호에 상관없이 자리를 왼쪽으로 이동시킵니다.
- '>>' 연산자는 음수인 경우 부호를 유지시켜주기 위해서 빈자리를 1로 채웁니다.
- '>>>' 연산자는 부호에 상관없이 항상 0으로 빈자리를 채워줍니다.
산술 변환 (usual arithmetic conversion)
피연산자의 타입이 다르다면, 연산 전 형변환 연산자로 타입을 일치시켜야 한다.
자동 형변환 규칙이 적용되는 타입인 경우, 보통 작은 타입에서 큰 타입으로 자동 형변환이 수행된다.
연산 전 피연산자 타입의 일치를 위해 자동 형변환되는것을 '산술 변환' 또는 '일반 산술 변환'이라 한다.
- 두 피연산자의 타입을 같게 일치시킨다. (보다 큰 타입으로 일치)
- 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다. (ex. char + short → int + int → int) 이유는 int형이 JVM에서 효율적으로 처리할 수 있는 단위이기도 하며 오버플로우의 발생 확률을 줄이기 위해서.
실수형이 아닌 피연산자의 연산결과는 정수형이 되어 소숫점 이하의 결과가 버려진다. 따라서 실수 결과를 얻기 위해서는 피연산자 중 한쪽을 실수형인 float 혹은 double로 형변환 해야 한다.
728x90
반응형