POCU 강의
4. 형변환과 연산자
차나히
2024. 5. 17. 07:45
묵시적 변환 ( Implicit Conversion )
- 기본 자료형 간의 변환을 컴파일러가 "알아서" 해줌
- 모든 기본 자료형 간의 변환이 가능한것은 아니다!
- 특별한 문법이 따로 필요하지는 않다.
- 보통 비트수가 작은 변수들은 비트 수가 큰 변수로 묵시적 변환이 가능하다. 반대로, 비트수가 큰 변수는 작은 변수로 묵시적 변환은 불가능하다.
- 단, int 와 float의 경우에는 좀 다르다. int 를 float 으로 묵시적 변환하게 되면 자료 손실이 일어나게 된다.
- 이를 정밀도 손실이라고 하며, int/long 에서 float 으로, long 에서 double 로 변환할 때 발생한다.승격 ( Promotion )
- 컴파일러가 자동으로 실수형이나 부동소수형 자료의 이진 표현을 확장
- 산술 연산자나 논리 연산자가 제대로 동작하게 하거나 , ALU ( 산술논리장치 ) 가 좀 더 효율적으로 돌 수 있게 하려고 사용!
명시적 형변환
- 작은 형에서 큰 형으로 변환
- 예를 들어 32비트에서 64비트 형으로 변환하는것에 문제는 없다!
- 큰 형에서 작은 형으로 변환
- 값이 충분히 작으면 문제가 없다!
- 단, 값이 크다면 당연하게 문제가 발생한다. 런타임 중에 값이 어떻게 될지 예상할 수 없으며 이러한 상황을 정보의 손실이라고 부른다.
- 그러나 프로그래밍 언어마다 다를 수 있음.
- C# 에서는 불가능하나, C++ 에서는 가능하다.
- 값이 충분히 작으면 문제가 없다!
- 해결방법은?
- 명시적 형변환을 사용!
- 두 double 형 수를 더하기
- 소괄호를 이용하여 변하고자 하는 자료형을 보여줄 수 있다.
- 단, 모든 자료형들이 변환되는것은 아님! ( ex. bool )
- 소괄호를 이용하여 변하고자 하는 자료형을 보여줄 수 있다.
- 명시적 형변환이 중요한 이유는 프로그래머의 의도를 보여주기때문!
연산자
- 연산자의 종류
- 하나 이상의 피연산자를 가지며, 연산자의 종류에는 산술연산자, 증감연산자, 대입연산자, 비트연산자, 비트 이동 연산자 로 구성된다.
- 산술 연산자
- + 연산자
- 두 피연산자를 더하기
- - 연산자
- 두 피연산자를 빼기
- 연산의 결과가 음수일 경우 언더플로우를 조심하자.
- * 연산자
- 두 피연산자를 곱하기
- / 연산자
- 두 피연산자를 나누기
- 정수형의 피연산자의 경우 결과가 제대로 나오지 않을 수 있음을 주의
- % 연산자
- 나눗셈의 나머지를 구하는 연산자
- + 연산자
- 증가/감소 연산자
- ++ 연산자
- 피연산자 하나의 값을 1 증가
- 피연산자 앞에 혹은 뒤에 붙일 수 있다.
- -- 연산자
- 피연산자 하나의 값을 1 감소
- 피연산자 앞에 혹은 뒤에 붙일 수 있다.
- 추가
- 앞에 붙이는 연산자를 전위(prefix) , 뒤에 붙이는 연산자를 후위(postfix) 라고 한다.
- 이러한 방식은 하드웨어의 동작과 관계가 깊은데, 하드웨어에서 사용하는 명령어중 정수형 숫자를 1만큼 증가시키는 명령이 있다. 이 명령과 1대1로 맵핑을 시키는 명령어라고 생각하면, 당연하게도 num = num + 1 의 명령보다 빠르다는 사실을 알 수 있다.
- ++ 연산자