연산자가 연산을 수행하려면 반드시 연산의 대상이 있어야한다. 이것을 '피연산자(operand)'라 일컫는다. 피연산자로 상수, 변수, 식 등을 사용할 수 있다.
연산자(operator) 연산을 수행하는 기호(+,-,*,)
피연산자(operand) 연산자의 작업 대상(변수, 상수, 리터럴, 수식)
연산자의 우선순위
- 산술 → 비교 → 논리 → 대입. 나열한 순서대로 우선순위가 정해진다.
- 단항(1) → 이항(2) → 삼항(3) 단항 연산자의 우선순위가 이항 연산자보다 높다.
- 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.
산술 변환
이항 연산자는 두 피 연산자의 타입을 일치시켜야한다. 작은 타입을 큰 타입으로 변환시키는 것이 옳다. 그 이유는 값손실이 가능성이 존재하기 때문에 타입을 일치시킬 필요가 있다.
ex)
int i = 10;
float f = 20.0f;
float result = f + (float) i ;
public static void main(String[] args) {
char a = 'a';
char d = 'd';
char zero = '0';
char two = '2';
System.out.printf(" '%c' - '%c' = %d%n", d, a, d-a);
System.out.printf(" '%c' - '%c' = %d%n", two, zero, two-zero);
System.out.printf(" '%c' = %d%n", a, (int)a);
System.out.printf(" '%c' = %d%n", d, (int)d);
System.out.printf(" '%c' = %d%n", zero, (int)zero);
System.out.printf(" '%c' = %d%n", two, (int)two);
}
//결과
'd' - 'a' = 3
'2' - '0' = 2
'a' = 97
'd' = 100
'0' = 48
'2' = 50
산술변환 개념정리
- 두 연산자의 타입을 같게 일치시킨다. (작은 타입에서 큰 타입으로)
- 피연산자의 타입이 int보다 작을 경우 int로 통일 (ex byte, short)
단항연산자
증감 연산자 (++ --)
증가 연산자(++) 피연산자의 값을 1 증가시킨다.
감소 연산자(--) 피연산자의 값을 1 감소시킨다.
피연산자의 왼쪽에 위치 = 전위형(prefix)
피연산자의 오른쪽에 위치 = 후위형(postfix)
부호 연산자 (+ -)
부호 연산자는 -는 피연산자의 부호를 반대로 변경한 결과를 반환한다.
int i=-10; i=-i;
// i=10
public static void main(String[] args) {
char c = 'a';
//a ~ z 출력
for(int i = 0; i<26; i++) {
System.out.print(c++);
}
System.out.println();
c= 'A';
//A ~ Z 출력
for(int i =0; i<26; i++) {
System.out.print(c++);
}
System.out.println();
c='0';
//0부터 9 출력
for(int i = 0; i<10; i++) {
System.out.print(c++);
}
}
//결과
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
출처 : JAVA의 정석 - (남궁성지음)