[국비지원] 14일차 - 연산자, 프로그래머스
프로그래머스에서 코딩 테스트를 시작했다. 배웠던 개념들을 응용해서 학습할 수 있다는 점이 좋았다.
아직은 변수를 너무 많이 사용할 때가 많아서 그 점을 고치고 싶다.
물론 아직은 사소한 실수들로 오류가 팡팡 터지곤 한다 ...
배운 내용 정리
부호 연산자
+는 피연산자의 부호 유지 , -는 피연산자의 부호를 변경할 때 사용된다. 부호 연산자 역시 연산자이기 때문에 연산 결과는 int 타입이다.
증감 연산자
증감 연산자(++,--)는 변수의 값을 1 증가시키거나 1 감소시키는 연산자이다.
증감 연산자의 위치에 따라 결과가 달라진다.
int x = 1;
int y = 1;
int result1 = ++x + 10;
// x를 1 증가 > int result1 = 2 + 10
int result2 = y++ + 10;
// int result2 = 1 + 10 > y를 1 증가
증감 연산자가 변수 앞에 있으면 변수를 1 증가 또는 1 감소시킨 후에 다른 연산을 수행한다.
증감 연산자가 변수 뒤에 있으면 모든 연산을 끝낸 후에 변수를 1 증가 또는 1 감소시킨다.
산술 연산자
+ | 덧셈 연산 |
- | 뺄셈 연산 |
* | 곱셈 연산 |
/ | 나눗셈 연산 |
% | 나눗셈의 나머지를 산출하는 연산 |
오버플로우와 언더플로우
오버플로우 : 타입이 허용하는 최대값을 벗어나는 것
언더플로우 : 타입이 허용하는 최소값을 벗어나는 것
정수 타입 연산에서 오버플로우 또는 언더플로우가 발생되면 해당 정수 타입의 최소값 또는 최대값으로 되돌아간다.
byte value = 127;
value++; //value 값에 1을 더함
System.out.println(value); //-128
byte value2 = 128;
value--;
System.out.println(value); //127
나눗셈 연산 후 NaN과 Infinity 처리
나눗셈(/) 또는 나머지 연산자(%) 연산에서 좌측 피연산자가 정수이고 우측 피연산자가 0일 경우 예외가 발생한다.
하지만 좌측 피연산자가 실수이거나 우측 피연산자가 0.0 또는 0.0f이면 예외가 발생하지 않고 연산의 결과는 Infinity(무한대) 또는 NaN(Not a Number)이 된다.
5 / 0 > Infinity
5 % 0 > NaN
/ 와 %의 연산의 결과가 Infinity 또는 NaN인지 확인하기 위해서는 다음 함수를 사용한다
boolean result = Double.isInfinite(변수);
boolean result = Double.isNaN(변수);
비교 연산자
구분 | 연산식 | 설명 |
동등 비교 | == | 두 피연산자의 값이 같은지를 검사 |
!= | 두 피연산자의 값이 다른지를 검사 | |
크기 비교 | >,< | 피연산자의 크기를 비교(큰지를) |
>=,<= | 피연산자의 크기를 비교(크거나 같은지를) |
피연산자의 타입이 다를 경우에는 비교 연산을 수행하기 전에 타입을 일치시킨다.
단, float와 double의 경우에는 정밀도 차이 때문에 정확한 비교가 불가능하다. 이 경우는 피연산자를 강제 형변환 후에 비교 연산을 하면 된다,
0.1f == 0.1 //false
0.1f == (float) 0.1 // true
논리 연산자
구분 | 연산식 | 설명 |
AND (논리곱) |
&& 또는 & | 피연산자 모두가 true일 경우에만 연산 결과가 true |
OR (논리합) |
|| 또는 | | 피연산자 중 하나만 true이면 연산결과는 true |
NOT (논리 부정) |
! | 피연산자의 논리값을 바꿈 |
XOR (베타적 논리합) |
^ | 피연산자가 하나는 true이고 다른 하나가 false일 경우에만 연산 결과가 true |