더듬이의 헬로월드

Hello, World!

프로그래밍 언어/C++ [기본]

[C++기본] 2.자료형

더듬이 2021. 8. 24. 20:51
728x90

변수의 선언

char a;
short b;
int c;
long d;
long long e;
float f;
double g;
long double h;

자료형과 변수명을 한칸공백을 기준으로 나누어서 적고, 세미콜론을 붙힌다.

⇒ 이 이상은 너무 쉬워서 Pass..,...


자료형이란?

자료형이란 내가 사용할 변수의 그릇이다.

내가 넣을 수가 어떠냐에 따라서 자료형도 달라져야 한다!

C++에는 세가지 형태의 자료형이 있다!

변수는 크기를 차지하는데, 자료형에 따라 차지하는 크기가 달라진다.

이때, 변수는 컴퓨터의 어디에 저장될까?

⇒ 변수는 RAM이라는 메모리 기억 장치에 저장된다!

자료형의 크기 단위는 Byte,Bit로 나뉜다.

비트는 더 이상 나뉠 수 없는 최소단위를 말한다

1바이트는 8비트이다

만일 4바이트 크기의 자료형이라면 (2^8)^4 정도의 수를 표형할 수 있는 것이다!

자료형은 뒤에 내가 선언할 변수의 데이터 타입을 알려주는 역할을 한다고 보면 된다!


자료형의 음수 표현

자료형에서의 기본값은 signed이다.

signed란 음수와 양수, 0을 모두 포함한다는 뜻이다.

만일 자료형 앞에 unsigned를 적어준다면 그 변수는 양수만을 취급하게 된다!

unsigned char c;
c=256;

위의 경우를 살펴보자

unsigned char는 0부터 255까지의 값을 표현할 수 있다.

하지만 256을 대입하면 할당할 메모리 공간이 부족하기 떄문에 0이 들어가게 된다!

컴퓨터는 음수를 어떻게 표현할까?

char자료형을 통해 실험해보자.

char자료형은 1바이트,8비트의 값을 가지는 256가지의 경우의 수를 표현할 수 있는 자료형이다.

8비트의 첫번쨰 비트는 양수인지 음수인지를 표시하고, 나머지 뒤의 7비트는 값을 표현하게 되는 것이다.

즉, signed 형식이라면 첫번쨰 비트는 양수인지 음수인지를 판별하는 수단이 된다!

unsingned 형식이라면 첫번쨰 비트도 함께 값을 표현하는 비트가 된다!

그렇다면 0은요?

⇒0은 양수의 영역에 포함된다!

컴퓨터의 음수의 계산

컴퓨터는 -127을 127과 더해서 0이 되는 수를 -127이라고 생각한다.
즉, 자리수가 초과해서 모두가 0이 되는 시점에 있는 수가 그 수의 음수이다

char c1;
c1=255;

unsigned char c2;
c2=255

⇒그럼 c1 과 c2의 비트값은 같을까??

정답은 같다 이다 자료형에 떄라 표현하는 방식이 다른 것 뿐이다.

둘다 모두 8개의 비트가 모두 1인 상태이지만,

c1에서는 최상위 비트가 부호 역할을 하고, 1과 더했을 때 0이 되는 값이므로 -1로 보지만,

c2에서는 부호 역할을 하는 최상위 비트가 필요없기 떄문에 255의 값을 가지는 변수가 된다.

동일한 메모리 용량에 동일한 값이 들어있어도 어떻게 해석하느냐에 따라 달라질 수 있다!

2의 보수법

음수를 찾기 위한 방법이다.

수의 2진수 모든 자리수를 반전시킨다음에 1을 더한 값이 내가 찾는 값의 음수값이 된다!


정수형 변수

#include <iostream>
#include <climits>

using namespace std;

int main()
{
    short n_shortmax = SHRT_MAX;
    short n_shortmin = SHRT_MIN;
    int n_intmax = INT_MAX;
    int n_intmin = INT_MIN;
    long n_longmax = LONG_MAX;
    long n_longmin = LONG_MIN;
    long long n_longlongmax = LLONG_MAX;
    long long n_longlongmin = LLONG_MIN;

    unsigned short a=-1;
    unsigned int b=-1;
    unsigned long c=-1;
    unsigned long long d=-1;

    cout << "short자료형의 최대값 : " << n_intmax << endl;
    cout << "short자료형의 최소값 : " << n_intmin << endl;
    cout << "int자료형의 최대값 : " << n_shortmax << endl;
    cout << "int자료형의 최소값 : " << n_shortmin << endl;
    cout << "long자료형의 최대값 : " << n_longmax << endl;
    cout << "long자료형의 최소값 : " << n_longmin << endl;
    cout << "long long자료형의 최대값 : " << n_longlongmax << endl;
    cout << "unsigned short자료형의 구간 : " << a << endl;
    cout << "unsigned int자료형의 구간 : " << b << endl;
    cout << "unsigned long자료형의 구간 : " << c<< endl;
    cout << "unsigned long long자료형의 구간 : " << d << endl;
    return 0;
}

 

실수형

대부분의 컴퓨터에서는 부동소수점형을 따른다.

실수에서의 연산은 정확한 수치가 아니라 근사값을 표현한다.

부동 소수점의 방식은

부호부

지수부

가수부

로 나누어서 표현하는 방식이다.

부호는 최상위 비트로 정수처럼 양수와 음수를 표현하는 곳이다.

지수부는 소수점 앞의 수를 의미하고

가수부는 소수점 뒤의 수를 의미한다.

4바이트, 32비트의 float형 부동소수점형 변수를 본다면

부호부(1비트) / 지수부(8비트) / 가수부(23비트) 로 나뉘어서 표현할 수 있다.

[출처]https://www.google.com/url?sa=i&url=https%3A%2F%2Fweicomes.tistory.com%2F127&psig=AOvVaw0H4_dFejuHJzPAYHWOjJw8&ust=1629891684729000&source=images&cd=vfe&ved=0CAsQjRxqFwoTCLjD9ejJyfICFQAAAAAdAAAAABAN

특정 값이 딱 떨어지는 것이 아니라 근사한 값을 잡아내 주는 것이기 때문에
실수를 float보다 double형이 더 많이 쓰인다.

#include <iostream>
#include <climits>

using namespace std;

int main()
{
    float a = 3.14;
    double b=3.1456;

        cout << a << endl;
        cout << b << endl;
    return 0;
}

 

특별한 경우가 아니라면 정수형과 실수형의 연산은 혼합하지 않는 것이 좋다!
두 형식의 자료형은 아예 체계가 다르기 떄문에 불필요한 형변환 연산이 들어가서
복잡해 질수 있기 때문!

728x90

'프로그래밍 언어 > C++ [기본]' 카테고리의 다른 글

[C++기본] 6.변수  (0) 2021.08.25
[C++기본] 5.반복문  (0) 2021.08.25
[C++기본] 4.조건문과 삼항연산자  (0) 2021.08.24
[C++기본] 3.연산자  (0) 2021.08.24
[C++기본] 1.프로젝트 생성  (0) 2021.08.24