ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 아주 쉽게 배우는 C++ [chapter. 1 변수]
    C++ 2023. 1. 12. 23:29
    반응형

    여기까지 이 심해까지 타고 들어왔다는건

     

    C++에 관심이 있다는 이야기이다.

     

    본인은 많은사람들이 불편하다 많이 이야기하는 visual studio 2022 버전을 사용한다.

     

    그이유는 사람들이 가장 쉽게 다운로드 할 수 있는 버전이고 가장 빠른 hotfix를 제공하기 때문이다.

     

    설치과정은 과감히 pass 하겠다. 지웠다 다시 설치하기에는 너무 귀찮다.

     

     

     

     

     

     

    변수란?

     사전적 의미는 다음과 같다.

     컴퓨터 소스 코드에서의 변수 이름은 일반적으로 데이터 저장 위치와 그 안의 내용물과 관련되어 있으며
    이러한 것들은 프로그램 실행 도중에 변경될 수 있다.
    (wikipedia)

    뭔소리인지 솔직히 나도 모르겠다. 

     

    쉽게 풀어쓰면 언제든지 변할 수 있는 수라는 뜻이다.

     

    하지만 나는 조금 다르게 설명한다. 

     

    변수는 집(house)이다. 

     

    이게 뭔 뚱단지 같은 소리냐 할 수 있지만 진짜 집이다.

     

    예를들면

    int park;  라는 구문이 있다고 생각하자 

     

    여기서 int는 자료형이고 park는 변수명이다.

     

    자료형은 집의 크기를 나타내고 변수명은 집의 이름을 나타낸다.

     

    또한 변수에 들어있는 값은 그 집에 살고있는 사람의 다.

     

    이게 전부다 농담이 아니라 진짜 이게 전부다.

     

    변수는 이형태를 크게 벗어나지 않는다.

     

    실제로는 조금 나중에 보고 이론부터 하자

     

    C던 C++이던 자료형은 동일하다.

     

    그중 가장 많이 사용하는 변수 몇가지만 소개하겠다. 보기쉽게 자료형 크기 순으로 나열하겠다.

     

    정수형

    char (character) : 1byte [4bit 표현가능 범위 : -128 ~ 127]

    short                   : 2byte [8bit 표현가능 범위 : -32768 ~ 32767]

    int (integer)         : 4byte [32bit 표현가능 범위 : -2,147,483,648 ~ 2,147,483,647]

    long                    : 4byte [32bit 표현가능 범위 : -2,147,483,648 ~ 2,147,483,647]

     

    실수형

    float                     : 4byte [32bit 표현 가능 범위 -3.4 x 10^38 ~ 3.4 x 10^38]

    double                 : 8byte [64bit 표현 가능 범위 -1.8 x 10^308 ~ 1.8 x 10^308]

    long double         : 8byte [64bit 표현 가능 범위 -1.8 x 10^308 ~ 1.8 x 10^308]

     

    그러면 여기서 의문점을 가질 수 있다. int형과 long의 형은 같은데 왜 굳이 나누어 뒀을까?

     

    그이유는 windows가 아닌 타 os에서는 필요하기 때문이다.

     

    보통 우리가 사용하는 windows 뿐만 아니라 mac, Linux 등 대부분의 플랫폼(operating system)에서 C, C++개발을 지원을 한다.

     

    하지만 모든 운영체제의 default resistor bit 가 windows 처럼 32bit 운영체제가 아닐수도 있다.

     

    아니 int랑 long을 설명하는데 왜 operating system이 나오냐?

     

    그이유는 int는 os상에서 가장 빠른 연산을 위해 os의 기본 bit에 맞추어 설정이 된다.

     

    즉 windows 운영체제의 visual studio는 32bit 환경에서 동작하기 때문에 int 4byte가 되는것이다.

     

    타 os의경우 bit가 다른 경우가 있다. 이를 조심해야 한다.

    int형이 무조건 4byte라고 생각하면 안된다. 꼭 sizeof연산자를 통해 크기를 확인하자

     

    하지만 long의 경우 int와 달리 무조건 4byte다. 때려죽여도 4byte다.

     

     

    이제 자료형의 크기를 알았으니 뒤의 표현가능 범위도 눈치가 빠르다면 대충 이해했을 것이다.

     

    컴퓨터는 어떤일이 있어도 이진수 즉 binary로 동작한다.

     

    그렇기 때문에 표현 가능범위라 적었지만 이 표현 가능범위안에 표현이 가능한 크기의 자료가 들어있다면.

     

    이는 문자든 숫자든 원하는대로 사용이 가능하다.

     

    이제 문자는 잊어라 모든것이 숫자로 동작한다 (이 개념이 진짜 중요하다).

     

    한번 실제 코딩을 통해 위의 내용을 확인해 보자.

     

    각각의 설명은 주석을 확인해라.

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	// 설명에 앞서 출력 구문에 대해 간단하게 설명하면 2번줄의 using namespace std;부분이 있는데 이는 나중에 설명할 것이다.
    	// 위의 using namespace std; 때문에 std를 계속 참조(::)를 해줄 필요가 없다 이도 나중에 따로 설명하겠다.
    	// 아래 구문은 출력 형식을 정해준것이다. C언어를 했다면 printf("%d"); 와 비슷하나 좀 다르다.
    	// cout << "글을 출력한다면 따옴표"<< A(변수를 출력한다면 그냥 적는다 %d? %c? %f? 형 선택? 그런거 없다.)<< '\n'(새줄은 동일하다)
    	// 즉 첫번째 줄을 해석하자면 (문자) (변수)(문자)(변수)순으로 이어진다. 
    	// 입출력은 몇번 해보면 쉽게 이해 할 수 있다.
    
    	cout << "정수형 \n";
    	cout << "size of char : " << sizeof(char) << "byte  " << CHAR_MIN << " ~ " << CHAR_MAX << '\n';
    	cout << "size of unsigned char : " << sizeof(unsigned char) << "byte  " << "0" << " ~ " << UCHAR_MAX << '\n';
    	cout << "size of short : " << sizeof(short) << "byte  " << SHRT_MIN << " ~ " << SHRT_MAX << '\n';
    	cout << "size of unsigned short : " << sizeof(unsigned short) << "byte  " << "0" << " ~ " << USHRT_MAX << '\n';
    	cout << "size of int : " << sizeof(int) << "byte  " << INT_MIN << " ~ " << INT_MAX << '\n';
    	cout << "size of unsigned int : " << sizeof(unsigned int) << "byte  " << "0" << " ~ " << UINT_MAX << '\n';
    	cout << "size of long : " << sizeof(long) << "byte  " << LONG_MIN << " ~ " << LONG_MAX << '\n';
    	cout << "size of unsigned long : " << sizeof(unsigned long) << "byte  " << "0" << " ~ " << ULONG_MAX << '\n';
    	cout<<'\n'; cout << '\n'; cout << '\n';
    
    	cout << "실수형 \n";
    	cout << "size of float : " << sizeof(float) << "byte  " << '\n';
    	cout << "size of double : " << sizeof(double) << "byte  " << DBL_MIN << " ~ " << DBL_MAX << '\n';
    	cout << "size of long double : " << sizeof(long double) << "byte  " << '\n';
    
    
    
    
    }

    실행 결과

    본문의 내용과 동일하게 출련된 것을 확인 할 수 있다.

     

    이제 자료형의 설명이 끝났으니 변수 선언과 사용에 대해 보면

     

    C와 동일하다.....

     

    처음 해보는 사람들을 위해 조금 보여주자면

     

    위에서 예로 들은것을 한번 봐보겠다.

    각 변수의 집의 크기로 표현한 자료형과 그 내부 데이터가 정상적으로 출력이 되었다.

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int park=10;
    	char npark = 10;
    	float n1park = 10;
    
    	cout << "byte size : " << sizeof(park) << "   value is : " << park<<'\n';
    	cout << "byte size : " << sizeof(npark) << "   value is : " << npark << '\n';
    	cout << "byte size : " << sizeof(n1park) << "   value is : " << n1park << '\n';
    }

    하지만 char로 선언한 부분은 내부값이 정확하게 나오지 않았다. 그이유는 무엇일까?

     

    이 코드를 하기전 코드 주석을 보면 C++에서 위같은 형식을 사용하면 출력 형 지정을 굳이 할 필요가 없다 했다.

     

    우리는 char 즉 문자형으로 변수를 선언했고 이 문자형 변수는 정상적으로 출력을 한것이다.

    왜냐? 우리가 정수로 출력하라고 강제 형 지정을 해주지 않았기 때문이다.

     

    그리고 이게 어떻게 정상적으로 출력된것이냐 확신을 하냐면 ascii code table을 보면 된다. decimal 10의 경우 char에서 

    line feed 즉 줄바꿈을 진행한다. 위에서 줄이 한줄 바뀌었기에 정확히 동작했다 할 수 있다.

     

    그러면 위에서 말한 강제 형변환은 어떻게 하는것인가?

    그냥 변수앞에 괄호를 열고 내가 원하는 자료형을 적어주기만 하면 된다.

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int park=10;
    	char npark = 10;
    	float n1park = 10;
    
    	cout << "byte size : " << sizeof(park) << "   value is : " << park<<'\n';
    	cout << "byte size : " << sizeof(npark) << "   value is : " << /*명시적 형변환 ->*/(int)npark << '\n';
    	cout << "byte size : " << sizeof(n1park) << "   value is : " << n1park << '\n';
    }

    이런식으로 강제 형 지정을 해주면 된다.(실제로는 강제 형 지정이 아닌 명시적 형 변환이 맞는 표현이다.)

     

     

     

     

     

     

    오늘은 각 변수의 의미와 사용법을 설명했다.다음 회차는 실제로 User에 의해 실제 데이터를 서로 주고받으며

    기본적인 데이터 논리연산과 산술연산에 대해 알아보는 시간을 가져보자.

     

     

     

     

     

     

    내용중 틀린 내용이 있으면 댓글 부탁드립니다.

    혼자 공부하는 학부생이다 보니 부족한점이 많습니다.

    반응형
Designed by Tistory.