#따배씨 4.5 Type Conversion 형변환
by #독개#암시적형변환 (coersion)
사용자가 이데이터 형을 이데이터 형으로 바꿔주세요 라고 명확하게 이야기 하지 않는 경우
컴파일에는 문제없으나 상황에따라 다른결과가 나올수있다.
int a = 123.0;
이경우 a는 int인데 값은 double을 넣어버렸다.
이럴때 컴파일러는 이정도는 알아서 123.0을 int로 바꿔서 a에 넣어버린것이다.
그런데 문제는 123.2 이런건 값이 달라지지 (int a = 123.3; -> 123출력)
컴파일해준다 컴파일하면 컴파일완료 후 이런 경고메세지가 뜬다
https://nanagame2.tistory.com/179
#따배씨 2.1 기본 자료형 소개
기본 자료형 소개 Fundamental Data Types (Built in Data Types 등 여러가지 방법으로 부른다) 1byte == 8bit char == 1byte (문자하나) int == 4byte == float 모든 데이터형은 내부적으로 숫자로 변경해서 저장한다 char a
nanagame2.tistory.com
자료형의 크기가 더큰건 암시적 변환해도 아무 상관없으나
문제는 자료형이 작은것에서 큰것으로 암시적 변환 할때는 자른다는 것이다.
명시적 형변환 (cast)
3가지 방식이 있다
코드
/*
형변환(conversion)
암시적형변환(coersion) 컴파일러가 알아서 형변환해준다
명시적형변환(casting)
*/
#include <iostream>
#include <typeinfo>
int main()
{
using namespace std;
/*
암시적형변환
컴파일러가 직접 형변환 해주는것 예전에는 다 오류났으나 지금은 똑똑해서 어느정도 해준다
작은자료형에서 큰자료형으로 암시적변환시는 상관없다 큰집으로 이사가는데 문제안되지
반대인 경우가 전혀 다른값이 나온다
*/
int a = 12345;
float b = a;
double c = a;
float f = 3.84;
int i = f;
cout << typeid(a).name() << endl; // a의변수가 어떤형인지 알려준다
cout << a << endl; // 12345
cout << b << endl; // 12345
cout << c << endl; // 12345
cout << f << endl; // 3.14
cout << i << endl; // 3 실수를 i로 암시적변환할땐 반올림x 그냥 .뒤를 버린다
//자료형연산에 우선순위가 존재한다
// int, unsigned int, long, unsigned long, long long, unsigend long long ,float ,double, long doube
cout << 5u - 10; //결과값으로 -5가 나와야하는데 엉뚱한 4585886324이런값이 나온다
//그이유는 5u는 unsigned형인데 뒤의 int보다 우선순위가 높기때문에 결과를 unsigned int로 보낸다 근데 -5는 못들어가니 오류값
//앞에서 int - double 하면 하나만 실수면 자료형이 실수가 되는거 기억날거다 이게 같은원리다
//프로그래머들이 이런 실수를 할수 있다
/*
명시적 형변환
프로그래머가 직접 형변환 시켜주는거 2가지스타일이 있다
*/
int t = (int)4.0; //c스타일
int z = int(4.0); //c++스타일
int y = static_cast<int>(4.0); //최근스타일 이게좋다고 하는사람들도많다 그냥C스타일도좋다
}
🐱👓독하게 개발
'🔥 프로그래밍 학습 > C++' 카테고리의 다른 글
[C++] 4.7 Enum 열거형 enumerated types (0) | 2022.11.12 |
---|---|
#따배씨 4.6 문자열 String 소개 (0) | 2022.11.11 |
#따배씨 4.4 auto키워드와 자료형 추론 (0) | 2022.11.11 |
#따배씨 4.3 Using문과 모호성 (0) | 2022.11.11 |
#따배씨 4.2 전역 변수, 정적변수, 내부연결, 외부연결 (0) | 2022.11.11 |
블로그의 정보
독한 개발자
#독개#