Programming language/C++

[C++] 정수형 자료형

chaenii 2022. 7. 2. 16:59

자료형은 크게 정수형과 실수형으로 나뉜다.

 

정수형 자료형

C++에서 정수란 부호를 가지고 있으며, 소수 부분이 없는 수를 의미합니다.

 

정수형 데이터에 unsigned 키워드를 추가하면, 부호를 나타내는 최상위 비트(MSB, Most Significant Bit)까지도 크기를 나타내는 데 사용할 수 있습니다.

unsigned 정수로는 음의 정수를 표현할 수는 없지만, 0을 포함한 양의 정수는 두 배 더 많이 표현할 수 있게 됩니다.

음의 정수까지도 표현할 수 있는 signed 키워드는 모든 타입에서 기본적으로 생략할 수 있습니다.

* 최상위 비트(MSB, Most Significant Bit)란 1바이트를 구성하는 8개의 비트 중 최고값을 갖는 비트를 의미합니다.

 

정수형 데이터의 타입을 결정할 때에는 반드시 자신이 사용하고자 하는 데이터의 최대 크기를 고려해야 한다.

타입이 표현할 수 있는 범위를 벗어난 데이터를 저장하면 오버플로우(overflow)가 발생해 전혀 다른 값이 저장될 수 있습니다.

 

오버플로우(overflow)란 해당 타입이 표현할 수 있는 범위를 넘는 데이터가 저장될 때 발생하는 현상을 가리킵니다.

오버플로우가 발생하면 최상위 비트(MSB)를 벗어난 데이터가 인접 비트를 덮어쓰므로, 잘못된 결과를 얻을 수 있습니다.


바이트 단위

1 byte = 8 bit

1 bit는 더 이상 쪼갤 수 없는 최소 단위이다. 0 또는 1 값을 가진다.

 

2^10byte = 1024byte = 1KB

2^20byte = 1024KB = 1MB

2^30byte = 1024MB = 1GB

2^40byte = 1024GB = 1TB


1byte로 표현할 수 있는 수의 범위는?

 

(1) 양수만 취급하는 경우

1byte = 8bit => 2^8의 경우의 수가 나온다 => 총 256가지

--> 0 ~ 255까지 표현이 가능하다.

 

ii) 음수까지 취급하는 경우

--> -128 ~ 127까지 표현이 가능하다.


컴퓨터가 음수를 다루는 법

컴퓨터는 뺄셈을 음수의 덧셈으로 생각한다.

10 + (-10) = 0 

5   + (-5)  =  0 

이 가능하도록 하는 비트의 상태를 음수로 본다.

 

[예시1]

0111 1111 (127)

1000 0001 (-127)

 

0111 1111이 127이기 때문에 1111 1111이  -127이라고 착각하기 쉽다.

하지만, 0111 1111과 더 했을 때 0이 나오는 비트의 상태를 -127로 보기 때문에

-127은 1000 0001이다.

 

[예시1]

0000 0001 (1)

1111 1111(-1)

 

음의 정수 찾기(2의 보수법)

=> 대응되는 양수의 부호를 반전 후, 1을 더한다.

0000 0001 -> 1111 1110 + 1 ==> 1111 1111


#include <iostream>
int main()
{   
    /*
    자료형  (크기 단위, byte)
    정수형: char(1), short(2), int(4), long(4), long long(8)
    실수형: float(4), double(8)
    */

    // int: 자료형
    // i: 변수
    int i = 0;
    unsigned char c = 0;

    c = 0;
    c = 255;  // 11111111
    // c = 256;  // 예외 상황 : 범위를 넘은 경우 100000000 -> 하위 8bit 00000000 = 0

    // 1byte로 양수, 음수 둘다 표현
    // -128 ~ 0 ~ 127
    // 0______ : 양수 
    // 1______ : 음수 
    // -> 가장 왼쪽 bit를 MSB(Most Significatn bit)라고 부른다
    char c1 = 0;
    c1 = -1; // 11111111
    c1 = 255; // 11111111

    return 0;
}

결론 : unsigned char와 char는 같은 비트가 채워져 있어도 해석하는 방식이 다르기 때문에 255와 -1로 해석한다.

 


아리송한 데이터의 단위 바이트

 

아리송한 데이터의 단위 ‘바이트(Byte)’ – 삼성반도체이야기

괄목할만한 기술 발전으로 과거와는 비교할 수 없을 정도의 많은 데이터에 둘러싸여 살고 있는 지금, 이를 보관할 수 있는 데이터 저장매체의 대중화 역시 빠르게 이뤄지고 있습니다. HDD, SSD, 외

www.samsungsemiconstory.com

 

반응형

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

[c++] 실수형 자료형  (0) 2022.07.02