Chapter3 표현식과 문장

Joosi_Cool·2022년 6월 25일
2

C++

목록 보기
2/20
post-thumbnail

🐣자료형 변환 방법

1. 자료형 확인

typeid (expression).name();

위의 식으로 자료형 확인이 가능하다. expression자리는 표현식 자리로 이 식의 데이터 타입을 알려주는 기능을 한다.

2. 암묵적 자료형 변환


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;
}

4. 명시적 자료형 변환

  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;
}

boolalpha 조정자

이 조정자는 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칸 차지, 우측 정렬
}

profile
집돌이 FE개발자의 노트

0개의 댓글