제가 빠르게 복기하기 좋게 정리한 글입니다. 파일을 추가하는 세세한 방법과 과정은 마지막에 첨부된 영상으로 확인하시면 좋을 것 같습니다 :) 강의목차의 번호와 같은 목차번호를 사용하고 있으니 참고하세요!
Casting
casting이란 이미 자료형이 선언된 변수를 다른 자료형으로 찍어내는 것을 의미한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#include <iostream>
int main()
{
using namespace std;
char c1(65);
char c2('A');
cout << c1 << " " << c2 << " " << endl;
// cpp-style casting
cout << int(c1) << " " << int(c2) << endl;
// c-style casting
cout << (char)65 << endl;
// 할당 메모리크기를 찍어보면 casting되는 자료형
// 으로 늘어남
cout << sizeof((char)65) << endl;
// static_cast
// 위의 casting 방법은 좀 강제적이라면
// static_cast는 컴파일러에게 허락구하는 느낌
cout << static_cast<char>(65) << endl;
return 0;
}
|
cs |
casting은 기존변수에 영향을 주지 않는다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include <iostream>
int main()
{
using namespace std;
// casting은 기존변수에 영향을 주지 않고
// 해당 코드만 변화시키는 것
char ch(97);
cout << ch << endl; // a
cout << (int)ch << endl; // 97
//cout << static_cast<int>(ch) << endl;
cout << ch << endl; // a
return 0;
}
|
cs |
static_cast<int>(변수)를 이용해 casting했음을 강조하는 경우도 있다.
또, 1 byte 메모리를 할당받는 char자료형에 연속적인 문자를 입력하는 경우 첫번째 하나의 문자 외 나머지는 버퍼에 임시 저장되고 차례로 처리된다.
로컬 디버거를 써서 입력을 ab로 두개의 문자만 주었을 때 어떻게 되는지 보면 a와 b를 출력하고 나서 다시 cin을 만나면 버퍼에 있는 입력값들을 모두 소진하고 입력값을 받기 위해서 콘솔의 커서가 계속 깜박이는 것을 확인할 수 있다.
char의 size와 max, lowest값
char는 1 byte
엥? 웬 네모와 주소값이 나온다. char 자료형에서는 모든 아스키코드를 출력할 순 없다고 한다. int로 casting하여 출력해보자.
char를 int로 casting하면 아래와 같다.
unsigned char도 있다.
앞서 char자료형으로 출력했을 때 출력되지 않고 네모가 나왔었다. 이렇게 출력되진 않지만 쓰임새 있는 문자들이 있다.
\n VS endl 이둘의 차이점
\n은 단순히 줄바꿈의 기능만 있지만
endl은 버퍼의 모든 것을 출력하고 줄을 바꾸라는 좀 더 구체적인 의미가 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include <iostream>
int main()
{
using namespace std;
cout << int('\n') << endl;
// \n과 endl의 차이점
// \n : 줄바꿈
// endl : 버퍼에 있는 모든 것을 출력하고 줄바꿈
// 매우 긴 정보량일 때 차이를 알 수 있다.
cout << "This is first line \nsecond line\n";
cout << "This is first line " << endl;
cout << "second line";
// std::flush
// 줄바꿈 없이 버퍼의 모든 것을 출력
return 0;
}
|
cs |
다른 기능을 담은 문자들 : \t \a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include <iostream>
int main()
{
using namespace std;
cout << int('\n') << endl;
// \t : tab
cout << "This is first line \tsecond line\n";
// \" : "를 출력하고 싶을 때
cout << "\"This is first line\"" << endl;
cout << "second line" << endl;
// \a : 사운드 출력
// 작업이 오래 걸릴 때 작업이 끝마치는 부분에 해놓으면
// 다른 것을 하며 기다릴 수 있다.
cout << "Sound\a";
return 0;
}
|
cs |
연습문제 : 아스키코드의 여러 문자들을 cin/cout 해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#include <iostream>
int main()
{
using namespace std;
char ch('A');
cout << " A = " << (int)ch << endl;
ch = 'Z';
cout << " Z = " << (int)ch << endl;
ch = 'a';
cout << " a = " << (int)ch << endl;
ch = 'z';
cout << " z = " << (int)ch << endl;
ch = '|';
cout << " | = " << (int)ch << endl;
ch = '@';
cout << " @ = " << (int)ch << endl;
return 0;
}
|
cs |
출처)
홍정모의 따배씨++
www.youtube.com/watch?v=MOuWt9qoZtY&list=PLNfg4W25Tapw5Yx4yuExHNybBIUk68aNz&index=29&t=802s
좋은 강의에 너무나 감사하다.
이전에는 그냥 무작정 따라썼던 코드들을 한줄한줄 이해하며 공부할 수 있다.
언젠가 어느 언어든 자신감이 있는 코드마스터가 될 것이다.
데이터가 인간을 대신해 일을 하게하고
데이터를 제어해 로봇을 제어하고 싶다.
'아앙의 전설'에서 주인공은 물/불/흙/공기 원소를 자유자재로 다룬다.
수많은 데이터가 넘실대는 현대에서는 데이터를 자유자재로 다루는 프로그래머.
실력있는 프로그래머가 되기 위해서는 코드 한줄이 내부적으로 어떻게 작동되는지를 이해해야한다.
'기계공학부 시절의 기록 > C++일기' 카테고리의 다른 글
클래스 상속, 생성자 정의 (0) | 2021.10.05 |
---|---|
상수 : 리터럴상수, 심볼릭상수 (0) | 2021.05.07 |
2.6 불리언 자료형 (0) | 2021.05.05 |
2.3 ~ 2.5 고정너비정수, void, double, 절단오차 (0) | 2021.05.05 |
2.2 정수형 (0) | 2021.05.04 |
댓글