typeid (expression).name();
위의 식으로 자료형 확인이 가능하다. expression자리는 표현식 자리로 이 식의 데이터 타입을 알려주는 기능을 한다.
1) 암묵적 자료형 승격
서로 다른 자료형을 연산하면 암묵적으로 자료형 변환을 수행한다.
이는 산술 연산자의 피연산자에 자동으로 적용한다.
//예시 코딩 #include<iostream> #include<typeinfo> using namespace std; int main() { char example = 'A'; cout << "A의 자료형 = " << typeid(example+100).name() << endl; cout << "A의 값 = " << (example+100) << endl; }
이처럼 A는 char자료형이였지만, +100을 함으로써 자동으로 자료형이 승격했다.
2) 암묵적 자료형 변경
위에 자료처럼 자료형엔 우선순위가 존재한다. 연산시에 우선 순위가 높은 것을 기준으로 변경된다.
//예시 코딩 #include<iostream> #include<typeinfo> using namespace std; int main() { int num1 = 1; double num2 = 1.234; cout << "num1의 자료형 : " << typeid(num1).name() << endl; cout << "num2의 자료형 : " << typeid(num2).name() << endl; cout << "num1 + num2의 자료형 : " << typeid(num1+num2).name() << endl; }
static_cast<type> (expression)
명시적 자료형 변환은 자료형을 원하는 형태로 강제로 변환하는 것을 말한다.
#include<iostream> using namespace std; int main() { double num = 1.234; cout << "num을 int형으로 바꾸면 = " << static_cast<int>(num) << endl; }
이처럼 double형을 int로 바꾸면서 소수점이 사라진것을 볼 수 있다. static_cast<int(num)의 의미는 num을 int로 바꾼다는 의미이다.
자료형의 최대값보다 크거나 최소값보다 작은 값을 저장하려면 문제가 발생할 수 있다. 이를 오버플로우 언더플로우라고 부른다. 우리가 코딩을 배우는데 있어서, 이 오버플로우랑 언더플로우를 잘 사용하진 않지만, 이후에 쓸 경우가 있는데 이를 고려해주는 것이 필요하다.
숫자의 진법을 변경하는 조정자(dec, oct, hex)
출력할때 이를 이용하여 10진법(dec), 8진법(oct), 16진법(hex) 중 하나로 출력한다. 원하는 진법을 선택하여 중간에 코드에 집어 넣어주면 된다.
showbase 라는 것이 있는데, 이는 어떤 진법이 출력되는지 알려주는 값이다.
1. 10진수: 아무것도 붙지 않는다.
2. 8진수:0이 접두사로 붙는다.
3. 16진수: 0x가 접두사로 붙는다.
//예시 코딩 #include<iostream> using namespace std; int main() { int a = 1237; cout << "a의 10진수 값: " << dec << a << endl; cout << "a의 8진수 값: " << oct << a << endl; cout << "a의 16진수 값: " << hex << a << endl; cout << endl; cout << "a의 10진수 값: " << showbase <<dec << a << endl; cout << "a의 8진수 값: " << showbase<< oct << a << endl; cout << "a의 16진수 값: " << showbase<<hex << a << endl; }
이 조정자는 bool자료형이 출력될 때 0,1로 출력이 되는데, 이를 True or false로 출력이 되게 한다. 방법은 원하는 출력값 앞에
<<boolapha<<
붙이면 된다.
- 고정 소수점 => fiexed (이는 소수점 6자리까지 나타내준다.)
- 과학 표기법 => scientific (과학 표기법으로 출력)
//예시 코딩 #include<iostream> using namespace std; int main() { double a = 1237; cout << fixed; cout <<"고정 소수점 기준 A 값: "<< a << endl; cout << "과학 표기법 기준 A값: " << scientific << a << endl; }
이처럼 값을 표기 이전에 fixed, scientific을 선언해주면 된다.
- setprecision(n) =>소수점 자릿수 설정이다.
- setw(n) => 출력하는 데이터 칸을 지정해준다. 이를 통해 정렬이 가능하다.
- setfill(ch) => 빈공간을 ch로 채워주는 역할을 한다.(단 ch는 자료형이 문자형이여야만 한다.)
=>#include<iomanip>
을 해주어야 사용할 수 있다.
+showpos는 부호를 보여주는 기능을 한다.
+setw(n)에 대한 추가설명
- right, left
-> 빈공간을 만들면 우측 정렬, 좌측 정렬을 할지 결정해야 하는데, 이를 right, left를 가지고 한다.- internal
-> 이는 왼쪽 끝에 부호, 오른쪽 끝에 숫자가 오는 방식으로 보여준다.
//예시 코딩 #include<iostream> #include<iomanip> using namespace std; int main() { double x = 1237234.1235; cout << fixed << setprecision(2) << showpos << setfill('!'); // 부동 소수점, 소수점 2번째까지, 부호 표시O, 빈공간은 '!' cout << setw(15) << left << x << endl; //공간 15칸 차지, 좌측 정렬 cout << setw(15) << internal << x << endl; //공간 15칸 차지, 부호 왼쪽 숫자 오른쪽 정렬 cout << setw(15) << right << x << endl; //공간 15칸 차지, 우측 정렬 }