본문 바로가기
기계공학부 시절의 기록/C++일기

2.7 문자형 char

by juhyeonglee 2021. 5. 6.
728x90
반응형

 

제가 빠르게 복기하기 좋게 정리한 글입니다. 파일을 추가하는 세세한 방법과 과정은 마지막에 첨부된 영상으로 확인하시면 좋을 것 같습니다 :) 강의목차의 번호와 같은  목차번호를 사용하고 있으니 참고하세요!

 

 


 

 

 

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

 

좋은 강의에 너무나 감사하다.

이전에는 그냥 무작정 따라썼던 코드들을 한줄한줄 이해하며 공부할 수 있다.

언젠가 어느 언어든 자신감이 있는 코드마스터가 될 것이다.

 

데이터가 인간을 대신해 일을 하게하고

데이터를 제어해 로봇을 제어하고 싶다.

 

'아앙의 전설'에서 주인공은 물/불/흙/공기 원소를 자유자재로 다룬다.

수많은 데이터가 넘실대는 현대에서는 데이터를 자유자재로 다루는 프로그래머.

실력있는 프로그래머가 되기 위해서는 코드 한줄이 내부적으로 어떻게 작동되는지를 이해해야한다.

728x90
반응형

댓글