C++ 형 변환 - 변환 규칙

진경천·2023년 10월 27일
0

C++

목록 보기
57/90

형 변환

다른 타입끼리의 연산은 우선 피연산자들을 모두 같은 타입으로 만든 후에 수행되며
이를 형 변환이라고 한다.

char ch = 1544;
int i = 1.1f;

형 변환 과정에서는 데이터의 손실이 발생할 수 있으며 이를 축소변환(demotion)이라고 한다.
축소변환이 일어나는지 확인을 하려면
중괄호를 이용해 컴파일이 되는지 확인을 한다.

int i = { 1.1f };
  • 실행 결과

정수의 형변환

정수의 형변환은 기본적으로 int로 형변환이 된다.
산술 연산과정에서는 더 큰 자료형으로 형변환이 일어난다.
ex) short + int = int
같은 타입과 unsigend의 연산은 unsigned로 형변환
ex) unsigned int + int = int

#include <iostream>

using namespace std;

int main() {
	unsigned short s0 = 40000;
	// unsigned short의 최대 값 = 65535
	unsigned int i0 = 4100000000;
	// unsigned int의 최대 값은 = 4,294,967,295
	long long ll0 = i0;
	unsigned int i1 = -110;
	int i2 = 10;

	cout << s0 + s0 << endl;
	cout << typeid(s0 + s0).name() << endl;
	cout << endl;
	cout << i0 + i0 << endl;
	cout << typeid(i0 + i0).name() << endl;
	cout << endl;
	cout << i0 + ll0 << endl;
	cout << typeid(i0 + ll0).name() << endl;
	cout << endl;
	cout << i1 + i2 << endl;
	cout << typeid(i1 + i2).name() << endl;
	// underflow 발생
}
  • 실행 결과

    80000
    int

    3905032704
    unsigned int

    8200000000
    __int64

    4294967196
    unsigned int

실수의 형변환

사이즈가 더 큰 자료형으로 형변환이 이뤄진다.
ex) long double + double = long double
    float + double = double
    실수 + 정수 = 실수

float f = 1.f;
	unsigned long long ull = 10ULL;

	cout << typeid(f + ull).name() << endl;
  • 실행 결과

    float

변환 규칙
char형 → short형 → int형 → long형 → float형 → double형 → long double형

산술 연산자 외의 연산자에서의 형변환

#include <iostream>

using namespace std;

class Test {
public:
	explicit operator bool() const {
		return true;
	}
};

int main() {
	Test t;
	!t;
	t && true;
	cout << false || t;
}

t가 boolean 형으로 바뀌었다.

profile
어중이떠중이

0개의 댓글