담엔 연산자에 대해 설명할건데,
그 전에, 데이터 타입의 변환 (형변환) 에 대해 잠깐 설명해보자.
형변환은 말 그대로 데이터의 형(타입)이 변하는 상황을 말하는데,
이게 필요한 이유는 프로그램에서 데이터들을 연산할 때엔 무조건 같은 자료형끼리 연산해야하기 때문이다.
형변환은 묵시적 형변환과 명시적 형변환으로 나뉘는데, 쉽게쉽게 생각하면 별거없다.
먼저 묵시적 형변환은,
예를들어
int nNum = 3.141592;
를 보자.
정수형 변수 nNum은 소수점아래를 저장할 수단이 없다.
만약 형변환 없이 저장된다면 몇십억 어쩌고하는 값이 나올꺼다
(이건 컴퓨터 내부에 소수값이 어떤형식으로 저장되는지 공부하면 안다)
때문에 컴파일러는 소수점 아래 값을 '버리고' 3 만을 정수형 변수 nNum에 저장할 것이다.
또는 서로다른 데이터타입의 연산에서도 형변환이 일어나는데,
C++에서는 크기가 작은 데이터타입을 큰 데이터타입으로 형변환하여 연산한다.
(크기가 큰 데이터타입을 작은데이터타입으로 형변환하면 데이터의 손실이 일어난다.)
*주의 :: char나 short는 무조건 int형으로만 형변환이 일어난다는 점이다.
이런걸 묵시적 형변환이라 하고,
명시적 형변환은,
형변환을 명확하게 지정해줘서 확실하게하고, 원하는 타입으로 변경시킬 수 있다.
이때 사용되는 연산자를 캐스트연산자라고 하고,
static_cast<형변환할 데이터타입>(변수);
와 같이 쓴다.
(static_cast외에도 dynamic_cast 등 여러가지 캐스팅이 있지만, 여기선 간단한것만.)
ex)
int nA=7;
double dB;
dB = static_cast<double>(nA);
위 식은 명시적 변환 없이도 변환이 일어나겠지만, 이렇게 하면 명확히 할 수 있다.
아, 또 명시적 변환이 중요한 이유는,
#include<iostream>
int main(){
int nA=100, nB=10;
int nNumber=3;
double dResult;
dResult = (nA+nB)/nNumber;
std::cout<<dResult<<std::endl;
return 0;
}
요런 코드가있을때 결과는 뭐가나오겠는가?
순서대로 해보면,
nA+nB = 110이고
110/3 = 36 이다. 왜?? 36.66666666666 이 아니고?
그렇다 36이다. 왜냐면 110은 int형이고 nNumber도 int형이다.
int형의 연산은 int형이므로 소수점 아래는 버리고,
결과적으로 dResult는 36.0 이 된다.
이런 문제를 해결하기 위해서 명시적으로
dResult = (nA+nB)/static_cast<double>(nNumber);
변환해주는 것이다.
아, 형변환은 식의 아무 변수나 해주면 된다.
(타입은 그 식의 가장 큰 타입을 따라가므로)
그럼 오늘은 여기까지 하고
내일 연산자와 연산순서를 잠깐 알아보자.
우후후 갈수록 코딩이 재밌어질꺼다.
'Coding Note' 카테고리의 다른 글
[C++] 포인터 이해를 위한 Linked List (0) | 2011.05.09 |
---|---|
[winAPI] 콘솔창 띄우기 (0) | 2011.03.09 |
[C++] 데이터 타입 (0) | 2011.03.03 |
[C++] 상수 변수 (0) | 2011.03.02 |
[C++] Hello World- (0) | 2011.03.02 |