춘식이왔엉 2022. 3. 28. 20:27

*연산이란?

데이터를 처리하여 결과를 산출하는 것

 

*연산자(Operator)

연산에 사용되는 표시나 기호(+,-,*,/,%,= 등)

 

*피연산자(Operand)

연산 대상이 되는 데이터(리터럴, 변수)

 

*연산자의 종류*


< 단항 연산자 >

1. 부호 연산자 ( + / - )

★ 부호 연산자의 산출 타입은 int ★

 

2. 증감 연산자 ( ++ / -- )

++x 전위 / 후위 x++

*증감 연산자가 변수 에 있으면(후위)

다른 연산자 먼저 처리 후 증감 연산자 처리*

개념은 공부하되, 그냥 풀어서 써라.

 

3. 논리 부정 연산자 ( ! )


< 이항 연산자 >

1. 산술 연산자 

여기서 v1/v2 (int타입)을 double로 자동 형변환이 아닌, 강제 형변환을 하는 이유는

int v1/v2의 값은 2이므로 이것을 그대로 double 타입으로 변환하면 2.0이 나오기 때문이다.

우리가 원하는 값은 2.5이기 때문에, v1이나 v2 중 '하나' 혹은 '둘 다' double 타입으로 강제 형변환 후

연산이 수행되어야 한다.  

 

 숫자 리터럴이 있을 때!!!
아래를 꼭 기억하자!!!

     (1) 정수 리터럴 ==> 무조건 int 정수로 가정
                           (뒤에 l/L이 없는한)

(2) 실수 리터럴 ==> 뒤에 f/F가 없는한,
                            double 타입으로 가정

 

double x = 0.1; 이라는 식이 있을 때, 여기서 0.1은 근사치이다. 그렇기 때문에 왼쪽과 같은 결과가 발생한다. 이 문제를 해결한 것이 오른쪽이다.

오른쪽 이미지에서 

double result = temp / 10; 이 아닌

double result = temp / 10.0 을 해 준 이유도, 바로 위의 내용과 같다.

정수 리터럴은 기본적으로 int타입으로 가정하기 때문에,

temp (int타입) ->3 / 10 (int타입) 을 하면 결과는 0.333... 을 int로 표현한 0이 나온다. 

따라서, double result = temp / 10; 에서 result 값을 출력하면 0.0이 된다.

우리가 원하는 값은 0.3이므로, temp을 실수 리터럴 10.0 (double타입)으로 나눠줘야 한다.

 

 

 

*char 타입에서의 연산

리터럴상수이므로 형변환 하지 않는다.

하지만 c2변수이므로 형변환 된다. 

c2 + 1을 하면 1이 int타입이기 때문에 연산 시 int 타입이 나온다.

 

 

*Overflow의 발생

 

*NaNInfinity 연산

 

 

2. 문자열 연산자

피연산자 중 문자열이 있으면 문자열로 결합

 

"기본타입 < 문자열타입" 기억!

 

3. 비교연산자 & 논리연산자


< 삼항 연산자 >