2022. 3. 15. 16:11ㆍC언어
1. 정수형(integer)
정수(integer)란 부호는 있지만, 소수점 이하를 표현하지 못하는 수이다.
12.23, 0.1 이런 값은 소수점 이하가 있으므로 정수가 아니다. 정수의 더 이상의 정수의 정의는
중학교 수준에서 설명이 됨으로 더 이상 다루지 않을 것이다. 우리가 아는 정수랑 컴퓨터가 아는 정수가 다른 점이 있다면, 컴퓨터의 메모리는 유한하기 때문에 수학적 정의와 같은 무한대의 범위를 지원하지 않는 정도만 다르다.
int i;
키워드 int다음에 원하는 변수 이름 그리고 세미콜론으로 구성되어 있다. 컴파일러는 이 선언문을 만났을 때 정수 값을
저장할만한 4바이트 공간을 할당하고 이 공간에 대해 i라는 이름을 붙여줄 것이다. 이후 i라는 변수명을 통해 이 메모리에 정수 값을 저장할 수 있고 또 값을 읽을 수도 있다. 정수형의 최대 표현 가능한 값의 크기와 부호의 존재 유무에 따라 여러 가지 종류로 나눠진다.
먼저 변수의 크기와 표현 가짓수의 관계에 대해 알아보면, 값 하나를 표현하기 위해 몇 비트를 사용할 것인가에 따라
표현 가능한 수의 개수가 달라진다. 예를 들어 1비트로만 구성된 정수형이 있다면, 이 정수는 0과 1의 두 가지 상태밖에 기억하지 못한다. 이런 비트가 두게 오면 00, 01, 10, 11 네 가지 각각 다른 상태를 표현할 수 있다.
비트가 세 개가 모인다면 2^3 승개 즉 8개의 수를 표현할 수 있다.

같은 원리로 비트가 4개 모이면 16가지의 상태를 표현할 수 있을 것이다. 일반적으로 n개의 비트가 모이면 2^n 가지의 수를 표현하는 것이 가능하며, 0부터 시작하므로 최대 표현 가능 수는 2^n-1이 된다.
8비트로 구성되는 1바이트는 총 256(0~255) 가지의 종류의 수를 표현할 수 있고, 표현 가능한 최대 수는 255가 된다.
int가 표현할 수 있는 데이터의 용량은 4바이트이다. (1byte==8bit)
컴퓨터는 0과 1밖에 모르기 때문에 우리는 8bit로 컴퓨터에게 얼마의 데이터 크기로 얼마를
표현할 것인지 알려주는 것이다.
1bit에 0과 1을 사용할 수 있으므로 0과 1을 표현할 수 있다.
int는 부호가 있는 4바이트짜리 자료형이므로 +-2의 16승까지 표현할 수 있다.
다음은 부호 여부에 따른 표현 번위 차이를 보자, 부호가 있는 정수(signed)는 제일 왼쪽 비트(MSB)를 부호 비트로 사용하며, 이 비트가 0이면 양수 1이면 음수가 된다. 이 이야기를 하는 것은 MSB를 부호 비트로 사용하면 값을 기억하는 비트가 줄어들게 되므로 표현할 수 있는 최댓값은 절반으로 줄어든 대신 음의 값을 표현할 수 있다. 값의 범위가 음수 영역으로 평행 이동하는 것이다.

*MSB는 최상위 비트라고도 하고 left-most-bit라고도 한다.
타입 | 크기(바이트) | 부호 | 범위 |
int | 4 | 있음 | -2147483648~2147483647 |
short int | 2 | 있음 | -32768~32767 |
long int | 4 | 있음 | -2147483648~2147483647 |
unsigned int | 4 | 없다 | 0~4294967295 |
unsigned short int | 2 | 없다 | 0~65535 |
여기서 질문! int랑 long int랑 같은 거 같은데 차이가 뭔가요?
나도 몰라 구글링해
int = cpu의 레지스터와 동일한 크기를 가지는 타입
long = 그런 거 모르겠고 무조건 4바이트
==int가 cpu를 가장 효율적으로 다룰 수 있음
*레지스터 : cpu내의 임시 기억 장소이며 레지스터의 크기에 따라 cpu의 비트수를 정의함
위 도표를 보면 각 타입별로 할당된 바이트 수와 부호 여부가 다른데 이 크기와 부호 여부에 따라 표현 가능한 수의 범위가 달라진다. 4바이트 크기의 unsigned int는 최대 42억이라는 큰 값을 기억할 수 있는데 2바이트 크기의 unsigned short int는 65535까지만 기억할 수 있다. int형은 부호가 있고 4바이트의 크기를 가지므로 -2^31~2^31-1까지의 범위를 가지는데 비해 unsigned형은 같은 4바이트지만 부호가 없기 때문에 음수를 표현할 수 없는 대신 0~2^32-1까지 표현이 가능하다.
++
부호에 대한 수식어가 생략되면 signed가 적용되어 부호가 있는 것으로 선언된다.
signed == int, signed short int == short int 그렇기 때문에 int는 실제로 signed int이고 signed는 쓰지 않고 간략하게 쓰는 것이다.
그냥 가장 큰거쓰면 오버 플로우도 안 뜨고 최고네?
똑같은 정수형에 대해서도 다양한 타입이 준비되어 있는데 이는 상황에 따라 가장 적절한 타입을 선택해서 쓸 수 있도록 하기 위해서다. ==> 메모리를 최대한 아끼자.
년도나 온도 같이 값이 일정 이상 커지지 않는 것은 short를 쓰는 것이 메모리를 절약하는데 도움이 된다.
==> 메모리 == 돈
'C언어' 카테고리의 다른 글
c언어-(문자열 string, 배열) (1) | 2022.03.17 |
---|---|
c언어-(자료형 실수형, 문자형) (0) | 2022.03.15 |
c언어 - (변수) (0) | 2022.03.10 |
c언어 기본코드 (hello 출력 및 코드설명) (0) | 2022.03.10 |
C언어를 공부하기에 앞서(주절주절) (0) | 2022.03.08 |