ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2.7 문자형 char
    C++일기 2021. 5. 6. 20:56

     

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

     

     


     

     

     

    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
    반응형

    'C++일기' 카테고리의 다른 글

    클래스 상속, 생성자 정의  (0) 2021.10.05
    상수 : 리터럴상수, 심볼릭상수  (0) 2021.05.07
    2.7 문자형 char  (0) 2021.05.06
    2.6 불리언 자료형  (0) 2021.05.05
    2.3 ~ 2.5 고정너비정수, void, double, 절단오차  (0) 2021.05.05
    2.2 정수형  (0) 2021.05.04

    댓글 0

Designed by Tistory.