방명록
- JAVA 연산자 기본개념 및 기초2024년 07월 22일에 업로드 된 글입니다.작성자: gamzah반응형
1. 연산자
1.1 연산자와 피연산자
- 연산자 : 연산을 수행하는 기호 (+,-,*,/ 등)
- 피연산자 : 연산자의 작업 대상 (변수, 상수, 리터럴, 수식)
1.2 식과 대입 연산자
- 계산만 하면 의미없음, 값을 변수에 저장해야함
- 저장하지 않고 결과만 출력하길 원하면 println 메서드로 출력만 하는것도 가능
1.3 연산자의 종류
종류 연산자 설명 산술 연산자 + - * / % << >> 사칙연산, 나머지 연산 비교 연산자 > < >= <= == != 크고 작음, 같고 다름 비교 논리 연산자 && || ! & | ^ ~ AND, OR 조건 연결 대입 연산자 = 우변의 값을 좌변에 저장 기타 (type) ?: instanceof 형변환 연산자, 삼항 연삱ㅏ, instanceof 연산자 피연산자의 개수에 의한 분류
- 단항 연산자 : 피연산자의 개수가 하나
- 이항 연산자 : 피연산자의 개수가 둘
- 삼항 연산자 : 피연산자의 개수가 셋
→ 대부분 연산자는 이항연산자, 삼항 연산자는 ?: 하나 뿐
1.4 연산자의 우선순위와 결합규칙
- 산술 > 비교 > 논리 > 대입
- 단항 > 이항 > 삼항
- 단항 연산자, 대입 연산자 제외 연산 진행방향은 왼쪽에서 오른쪽
1.5 산술 변환
- 두 피연산자의 타입을 같게 일치시킨다 (보다 큰 타입으로 일치)
- 피연산자의 타입이 int 보다 작은 타입이면 int로 변환된다
- ex) byte + short → int + int → int
(가장 효율적으로 처리할 수 있는 타입이 int이기 때문)
2. 단항 연산자
2.1 증감 연산자
- 증가 연산자 : ++ 피연산자의 값을 1 증가
- 감소 연산자 : -- 피연산자의 값을 1 감소
- 전위형 : 값이 참조되기 전에 증가 (j = ++i;)
- 후위형 : 값이 참조된 후에 증가 (j = i++;)
식에 두번 이상 포함된 변수에 증감연산자를 사용하는 것은 피해야 함
2.2 부호 연산자
boolean, char 제외한 기본형에만 사용
3. 산술 연산자
3.1 + - * /
- 피연산자가 정수형일 경우 0으로 나눌 수 없다 (실행 시 에러)
ex) System.out.println(3/0); // ArithmeticException 에러 발생
System.out.println(3/0.o); // Infinity 출력
- 연산 할 때 이미 오버플로우가 발생한 값을 아무리 long 타입에 저장해도 소용 없음 → 연산하는 타입 중 하나라도 큰 타입으로 형변환 후 연산
3.2 나머지 연산자 %
- 왼쪽의 피연산자를 오른쪽 피연산자로 나누고 난 나머지 값
- 부호는 무시된다
4.비교 연산자
연산 결과는 true, false 뿐
4.1 대소비교 연산자 <> <= >=
- boolean 제외 나머지 자료형에 다 사용 가능
- 참조형에는 사용 불가
4.2 등가비교 연산자 == !=
- 두 피연산자의 값이 같은지, 다른지 비교
- 모든 자료형에 사용 가능
ex ) 10 == 10.0f (true) → 이항연산자이므로 형변환을 통해 타입 맞춘 뒤 피연산자 비교함
ex ) 0.1 == 0.1f (false) → 정수형과 달리 실수형은 근사값으로 저장되어 오차 발생할 수 있음
- float를 double로 형변환 해도 나머지를 0으로 채울 뿐 값은 안변하기때문에 오차가 적어지는게 아님
문자열의 비교
문자열 비교는 == 쓰는 거 아니고, equals() 메서드 사용
객체가 달라도 내용이 같으면 true 반환
5. 논리 연산자
둘 이상의 조건을 AND, OR로 연결하여 하나의 식으로 표현
5.1 논리 연산자 &&, ||, !
- || (OR) : 피연산자 중 어느 한 쪽만 true면 true를 결과로 얻음
- && (AND) : 피연산자 양쪽 모두 true여야 true를 결과로 얻음
- OR과 AND가 함께 쓰여아 할 경우 괄호를 사용해 우선순위를 명확히 해주는 것이 좋다
효율적인 연산
- OR => 좌측 피연산자가 참이면 항상 참
- AND => 좌측 피연산자가 거짓히면 항상 거짓
※ 항상 같은 조건식이라도 피연산자의 위치에 따라 연산속도가 달라진다
(참일 확률이 높은 피연산자를 연산자의 왼쪽에 두어야 더 빠른 연산결과를 얻음)
예제 3-26)
int a = 5; int b = 0; a != 0 || ++b != 0 // true, a=5, b=0 a == 0 && ++b != -0 // false, a=5, b=0
++했는데도 저런 결과가 나오는 이유는
- OR의 경우 좌측 피연산자 (a!=0)이 참이라서 우측 피연산자 평가 없이 바로 true로 평가
- AND의 경우 좌측 피연산자 (a==0)이 거짓이라서 우측 피연산자 평가 없이 바로 false로 평가
논리 부정 연산자 !
true, false를 반대로 바꾸는 거
!!!b → !!true → !false → ture
5.2 비트 연산자 & | ^ ~ << >>
비트 단위로 논리 연산
- OR - 하나라도 1이면 1 (특정 비트 값을 변경할 때 주로 사용)
- AND - 모두 1이여야 1 (특정 비트 값을 뽑아낼 때 주로 사용)
- XOR - 값이 다르면 1 (간단한 암호화에 사용)
비트 전환 연산자~
- 2진수 0은 1로 1은 0으로
- 피연산자의 1의 보수를 얻을 수 있음
쉬프트 연산자 << >>
- 2진수를 이동해라
- 빈자리는 0으로 채워짐
- 부호있는 정수는 부호를 유지하기 위해 피연산자가 음수면 빈자리를 1로 (양수면 0)
- x >> n은 x * 2ⁿ 과 같고 <<은 나누기와 같음
- 쉬프트 연산자가 곱셈, 나눗셈보다 속도가 빠르긴 하나 코드의 가독성을 위해 웬만하면 곱셈&나눗셈을 쓰고 빠른 실행속도가 요구되면 쉬프트 연산자를 쓰자.
6. 그 외의 연산자
6.1 조건 연산자 ? :
- 조건식 ? 식 1 : 식 2 → 참이면 식1, 거짓이면 참2
- 중첩하면 코드가 간략해지긴 하지만 가독성이 떨어지므로 적절히
- 타입이 다른 경우 산술변환(형변환) 발생함6.2 대입 연산자
- 가장 낮은 우선선위
- x=y=3에서 y=3 다음 x=y가 수행됨
lvalue, rvalue
- 왼쪽 값 - lvalue
- 오른쪽 값 - rvalue
- lvalue는 값 바꿀 수 있는것, rvalue는 변수 및 식, 상수 다 가능
복합 대입 연산자
- i = i + 3 은 i += 3 같이 간결하게 표현 가능
반응형'JAVA' 카테고리의 다른 글
JAVA 객체지향언어 기초 (2) 2024.07.23 JAVA 배열의 기초 및 개념 (0) 2024.07.23 JAVA 조건문 기초 및 개념 (2) 2024.07.23 JAVA 변수의 개념과 기본 (0) 2024.07.22 JAVA 기본 개념 정리 (1) 2024.07.22 다음글이 없습니다.이전글이 없습니다.댓글