Server/C++

자료형(Data Type)

Juzdalua 2024. 7. 20. 02:26

선언할 변수의 메모리 공간의 크기를 나타내는 것.

'자료형 ( 크기 - byte)' 로 나타냄

1Byte = 8bit

2^10 byte = 1024 byte = 1 KB

2^10 KB = 1024 KB = 1 MB

2^10 MB = 1024 MB = 1 GB

2^10 GB = 1024 GB = 1 TB

 

정수형: char(1), short(2), int(4), long(4), long long(8)
실수형: float(4), double(8)

 

1bit는 0과 1로, 데이터가 있다 없다로 나뉨.

1bit는 0과 1, 표현할 수 있는 가지수는 2개.

= 1byte는 표현할 수 있는 가지수가 2^8개 (256개).


양의 정수 자료형 1바이트에는 0~255까지 256개의 데이터 저장이 가능하다.

256을 대입하면 어떤 일이 생길까?

#include <iostream>

using namespace std;

int main(){
    unsigned char a = 1;
    a = 256; // a = 0

    return 0;
}

255(10) = 1111 1111(2)

256(10) = 1 0000 0000(2)

256은 9bit이고 1byte를 초과하므로 0000 0000만 저장된다. 

따라서 a=0 이라는 결과가 나온다.


정수 자료형 1바이트에는 256가지 데이터를 표현할 수 있다.

-1 ~ -128 => 128가지 -> 1--- ----

0 ~ 127 => 128가지 -> 0--- ----

=> -128 ~ 127 256가지

signed 자료형에서 가장 왼쪽에 위치한 비트는 MSB (Most Significant Bit)로 음수(1), 양수(0)를 나타낸다.

 

2진법에서 뺄셈은 음수를 더하는 것이다.

=> 2진법에서 음수는 더했을 때 0이 되는 비트이다.

-1을 구하는 방법은 "1+x = 0"이다.

=> 0000 0001 + x = 0 이므로 -1 = x = 1111 1111이다.

1 0000 0000을 만들어 데이터가 저장될 공간의 크기를 넘겨 0000 0000으로 만드는 것이다.

 

음수를 구하는 방법은 2의 보수법( NOT 연산 + 1 )을 사용하면 편리하다.

ex) 

2 = 0000 0010

2의 보수 = 1111 1101

2의 보수 + 1 = 1111 1110 = -2

 

#include <iostream>

using namespace std;

int main(){
    cout << "Hello, World!" << endl;

    unsigned char a = 1;
    a = 255;    

    char b = 0;
    b = 255; // b = -1로 변경된다.
    
    a = -1; // a = 255로 변경된다.

    return 0;
}

양의 정수만 표현하는 자료형 unsigned char에서 1111 1111은 255였다.

정수를 표현하는 자료형 signed char에서 1111 1111은 -1이다.

unsigned char 255와 signed char -1은 같은 비트값을 가진다.


실수 자료형과 정수 자료형은 메모리에서 표현하는 방식이 다르다.

0~1 사이의 실수도 무한으로 존재하기 때문.

=> 프로그래밍에서는 부동소수점 방식을 사용한다.

https://ko.wikipedia.org/wiki/%EB%B6%80%EB%8F%99%EC%86%8C%EC%88%98%EC%A0%90

 

실수는 이진법에서 근사값으로 표기된다.

자료형의 크기가 클수록 표기할 수 있는 비트의 범위가 늘어나 정밀도가 올라간다.

이진법에서 0.1(2) = 2^-1 = 0.5(10)이다.

0.01(2) = 2^-2 = 0.25(10)이다.

=> 0.11(2) = 2^-3 = 0.75(10)이다.

 

참고)

https://learn.microsoft.com/ko-kr/cpp/cpp/fundamental-types-cpp?view=msvc-170

 

기본 제공 형식(C++)

자세한 정보: 기본 제공 형식(C++)

learn.microsoft.com

 

https://learn.microsoft.com/ko-kr/cpp/cpp/data-type-ranges?view=msvc-170

 

데이터 형식 범위

데이터 형식 범위에 대한 자세한 정보

learn.microsoft.com

 

'Server > C++' 카테고리의 다른 글

함수 (Function)  (1) 2024.07.20
입출력 (IO)  (0) 2024.07.20
전처리기 (#)  (0) 2024.07.20
연산자 (Operator)  (0) 2024.07.20
VSCode - C++ 시작하기  (0) 2024.07.20