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

2.1 기본자료형

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

 

 

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

 

 


 

 

 

2.1 기본자료형 : 자료형마다 데이터 사용량, 사용방식이 조금씩 다르다.

 

컴퓨터는 기본적으로 전압이 높고 낮음에 따른 0,1 둘밖에 다루지 못한다

1 bit = 0 or 1

1 byte = 8 bit 가 된다.

예를 들어서 

0 은 1bit이고

0100 은 4 bit

01001001은 8 bit = 1 byte가 된다.

 

아래 그림을 보면 문자와 숫자가 얼마만큼의 메모리를 차지하는지 알 수 있다.

문자는 개수가 많지 않아 1byte만을 사용한다.

하지만 정수는 그 수가 매우 많아 4byte를 사용한다.

 

출처 : 따배씨++ youtube https://www.youtube.com/watch?v=o2buKhNVCbc&list=PLNfg4W25Tapw5Yx4yuExHNybBIUk68aNz&index=23

#bool 연산자와 삼항연산

1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
int main()
{
    bool bValue = false;
 
    std::cout << (bValue ? 1 : 0<< std::endl;
 
    return 0;
}
cs

 

#char 자료형. 내부적으로는 숫자형태로 저장이 됨을 앞에 (int)를 붙여 출력해보면 알 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
int main()
{
    bool bValue = false;
    char chValue = 'A';
 
    //std::cout << (bValue ? 1 : 0) << std::endl;
    std::cout << chValue << std::endl//A
    std::cout << (int)chValue << std::endl//65
 
    return 0;
}
cs

 

# float, double 자료형 : double은 float의 두배만큼의 자료공간을 필요로한다. 그래서 이름이 더블이다.

주의:float자료형 뒤에는 f를 붙여야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int main()
{
    bool bValue = false;
    char chValue = 'A';
    float fValue = 3.141592f;
    double dValue = 3.141592;
 
    //std::cout << (bValue ? 1 : 0) << std::endl;
    //std::cout << chValue << std::endl; //A
    //std::cout << (int)chValue << std::endl; //65
    std::cout << fValue << std::endl;
    std::cout << dValue << std::endl;
 
    return 0;
}
cs

 

# auto 자료형(in cpp)

자료형을 자동으로 파악해 지정한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
int main()
{
    bool bValue = false;
    char chValue = 'A';
    float fValue = 3.141592f;
    double dValue = 3.141592;
 
    //std::cout << (bValue ? 1 : 0) << std::endl;
    //std::cout << chValue << std::endl; //A
    //std::cout << (int)chValue << std::endl; //65
    //std::cout << fValue << std::endl;
    //std::cout << dValue << std::endl;
 
    auto aValue = 3.141592f;
 
    std::cout << aValue << std::endl//3.14159
 
    return 0;
}
cs

 

# sizeof() : 자료형의 메모리size를 알 수 있다.

앞서 double은 float의 두배의 공간을 차지한다고 했었는데 아래 코드로 알 수 있다.

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()
{
    bool bValue = false;
    char chValue = 'A';
    float fValue = 3.141592f;
    double dValue = 3.141592;
 
    //std::cout << (bValue ? 1 : 0) << std::endl;
    //std::cout << chValue << std::endl; //A
    //std::cout << (int)chValue << std::endl; //65
    //std::cout << fValue << std::endl;
    //std::cout << dValue << std::endl;
 
    auto aValue = 3.141592;
    auto aValue2 = 3.141592f;
 
    std::cout << sizeof(aValue) << std::endl;//8
    std::cout << sizeof(aValue2) << std::endl;//4
 
    return 0;
}
cs

 

# 초기화 방법 3가지

첫번째는 흔히 많이 쓰는 초기화 방법.

두번째와 세번째는 객체지향에서, 직접만든 자료형을 초기화할 때 많이 쓰는 방법이라고 한다.

(예를 들어, 게임에서 어마어마한 양의 동시접속자 수를 다루려고 할 때, 이 데이터의 자료형은 직접 만들어 사용한다.)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int main()
{
    /*초기화 방법 3가지*/
    
    int a = 123;
 
    //direct initialization
    int b(123);
 
    //uniform initialization
    int c{ 123 };
 
    return 0;
}
cs

 

uniform initialization은 보다 엄격한 초기화 방식이다.

만약  int b(123.123);을 적고 b를 출력한다면 123이 에러없이 출력될 것이다.

하지만 int c{ 123.123 };을 적고 출력한다면 그전에 빌드오류가 뜰 것이다.

때문에 문제가 있다면 보수적으로 알려주는 uniform initialization을 사용하는 것이 좋을 때가 있다고 한다.

 

# 변수선언, 언제하는게 좋은가

사용하기 직선에 선언하는 것이 디버깅에도 좋다.

 

 


 

 

출처)

홍정모의 따배씨++

www.youtube.com/playlist?list=PLNfg4W25Tapw5Yx4yuExHNybBIUk68aNz

 

[따배씨++] 따라하며 배우는 C++ | 모던 c++, c++ 강의, c++ 강좌, c++ 언어, 기초 프로그래밍, c++ 프로그

[홍정모의 따라하며 배우는 C++ (모던 C++)] https://www.inflearn.com/course/following-c-plus?inst=aa88a07c [홍정모의 따라하며 배우는 C언어] https://www.inflearn.com/course/following-c?i...

www.youtube.com

 

 

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

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

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

 

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

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

728x90
반응형

댓글