개발공부/TIL

[국비지원] 14일차 - 연산자, 프로그래머스

jnnjnn 2024. 2. 22. 21:06

 

프로그래머스에서 코딩 테스트를 시작했다. 배웠던 개념들을 응용해서 학습할 수 있다는 점이 좋았다.

아직은 변수를 너무 많이 사용할 때가 많아서 그 점을 고치고 싶다.

물론 아직은 사소한 실수들로 오류가 팡팡 터지곤 한다 ...

 

 

 

 

 

배운 내용 정리


부호 연산자

 

+는 피연산자의 부호 유지 , -는 피연산자의 부호를 변경할 때 사용된다. 부호 연산자 역시 연산자이기 때문에 연산 결과는 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