운영자
- 연산자: 작업을 수행하는 기호
- 피연산자: 연산자가 수행하는 작업의 대상
- 연산자는 결과를 반환하지 않으면 연산자가 아닙니다.
연산자 유형
-
산술 > 비교 > 논리 > 할당: 할당이 마지막에 실행됩니다.
-
Unary(1) > Binary(2) > Ternary(3) : 단항 연산자의 우선순위가 가장 높습니다.
증가 연산자
-
증가 연산자(
++
) : 피연산자 값을 1씩 증가 -
축소 연산자(
--
) : 피연산자 값을 1씩 감소
int k = 0, j = 3;
// 전위형
k = ++j; // k = 4
j; // j = 4
k = 0, j = 3; // 초기화
// 후위형
k = j++; // k = 3
j; // j = 4
문자 연산자
-
: 피연산자의 역부호+
: 변화없음(실사용X)
캐스트 연산자
조판: 변수 또는 상수 유형을 다른 유형으로 변환
자동 유형 변환
- 타입은 기존 값을 최대한 보존할 수 있는 타입으로 자동 변환됩니다.
(컴파일러는 이 작업을 자동으로 수행합니다.
) - 표현 범위가 좁은 타입 → 넓은 타입 : 넓은 범위로 변환
- 표현의 범위가 좁은 유형 ← 넓은 유형: 가치 손실이 있어 자동 유형 변환이 불가능하다.
강제 유형 변환 필요
float f = 1234; // (OK) int 타입의 값을 float 타입 변수에 저장
int i = 3.14f; // (Error) float 타입 값이 더 크기 때문에 값 손실이 생겨서 error
int i = (int)3.14f; // (OK) 수동으로 형변환 시켜야 한다.
네 개의 산술 연산자
더하기(+), 빼기(-), 곱하기
int a = 10, b = 4;
System.out.println(a / 4); // 2 출력. 소수점 이하 버림
System.out.println(a / (float)b); // 2.5 출력
분할 (/)
산술 변환
- 연산 전 피연산자 유형 일치
- 두 피연산자의 유형이 동일하도록 일치시킵니다(더 큰 유형 일치).
char ch = '2';
// 문자 '2' 는 숫자로 50, '0' 은 48
// 따라서 int 타입으로 자동으로 변하기 때문에 50 - 48 = 2
System.out.println(ch - '0');
int a = 1_000_000; // 1백만
int b = 2_000_000; // 2백만
// long l = a * b; // -1454759936. 계산할 때 이미 오버플로우 발생하므로 형변환 필요
long l = (long)a * b;
// long * int -> long * long => 1_000_000L * 2_000_000 -> 1_000_000L * 2_000_000L
System.out.println("l = " + l);
피연산자의 유형이 int보다 작으면 int로 변환됩니다.
- 수학
round()
수학적 방법이 있는 수업
ceil()
: 소수점 첫째 자리까지 반올림한 정수를 반환합니다.floor()
: 증가된 값을 double로 반환abs()
: 반올림된 값을 double로 반환
// 소수점 3째 자리에서 반올림한 값 구하기
double pi = 3.141592;
double shortPi = Math.round(pi * 1000) / 1000.0;
: 절대값. int 및 double 기본 유형을 모두 사용할 수 있습니다.
-
나머지 연산자 %
-
왼쪽 피연산자를 오른쪽 피연산자로 나눈 나머지를 반환
-
나누는 피연산자(오른쪽)는 0이 아닌 정수만 허용합니다.
문자 무시
-
비교 연산자
-
연산 결과는 참 또는 거짓입니다.
- 비교 연산자: < , >≤, ≥
- 두 피연산자 값의 크기 비교
- 기본형 중 boolean을 제외한 모든 데이터형에 사용 가능
-
참조 유형을 사용할 수 없습니다.
- 등가 연산자: ==, ≠
- 두 피연산자의 값이 같은지 아닌지 비교
모든 데이터 타입(기본형 – 값 비교, 참조형 – 주소 비교) 사용 가능
-
==
문자열 비교equals()
대신에equals
사용==
: 두 피연산자의 값 자체 비교
: 두 피연산자의 주소 값 비교
-
&&
논리 연산자 -
||
: 그리고. 모든 논리식이 참이면 참을 반환합니다. -
!
: 또는. 논리식이 참이면 참을 반환합니다.
: 아니다.
논리식의 결과가 true이면 false를 반환합니다.
-
&
비트 연산자 -
|
: (비트 AND 연산) 해당 비트가 모두 1이면 1을 반환 -
^
: (비트 OR 연산) 해당 비트 중 하나라도 1이면 1을 반환 -
~
: (비트 XOR 연산) 해당 비트가 다르면 1을 반환 -
<<
: (비트 NOT 연산, 1의 보수) 비트를 1이면 0으로, 0이면 1로 반전 -
>>
: (좌이동 연산) 모든 비트를 지정된 숫자만큼 좌이동 -
>>>
: (오른쪽 시프트 연산) 부호를 유지하면서 모든 비트를 지정된 숫자만큼 오른쪽으로 시프트 -
: 모든 비트를 지정된 비트 수만큼 오른쪽으로 이동, 모든 새 비트는 0
연산은 비트 단위로 수행되므로 정수형과 변환 가능한 데이터형만 처리할 수 있습니다.
-
조건 연산자
조건식 ? 반환값1 : 반환값2
-
삼항 연산자
조건식이 참이면 값 1을 반환하고, 거짓이면 값 2를 반환합니다.
=
작업 관리자
: 오른쪽 피연산자를 왼쪽 피연산자에 할당
- 복합 할당 연산자
- 연산자(op)와 할당 연산자(op=)의 조합
예) += , -= , /= , *= , %= , <<= , &= , ^= , |= (참조)