티스토리 뷰

IT/C

C언어 unsigned 이해하기

탐구소년 2020. 10. 6. 15:23

 

C언어 기본 자료형의 앞에는 경우에 따라 unsigned 라는 키워드를 붙여 사용할 수 있습니다. 여기서 unsigned란 '부호가 없는'이라는 의미인데, 이에 대해 간단히 예를 들어가며 정리해보도록 하겠습니다(초간단 주의!).

 

 

데이터의 표현 방식 

 

자료형이란 언어가 데이터를 표현하는 방식으로써, 자료형마다 값을 표현하는 방식과 표현할 수 있는 값의 범위가 서로 다릅니다.

가령 int라는 자료형을 사용한다고 하면, 표현할수 있는 값의 범위는 다음과 같습니다. 

 

=> int 자료형이 표현할 수 있는 값의 범위 : –2,147,483,648 ~ 2,147,483,647

 

int 는 4바이트 만큼의 메모리 공간을 차지하는 자료형입니다. 바이트는 8개의 비트가 모여 형성되는 단위이므로, int는 32비트 자료형입니다. int가 정수 0을 표현하고 때의 각 비트의 상태를 표현하면 아래와 같습니다.

 

=> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (32)

 

int가 차지하는 32개의 비트 중에서 가장 끝에 자리한 비트 하나는 부호를 담당하는 비트인 MSB입니다(맨 왼쪽에 따로 표시). 이 비트가 0일 경우 해당 데이터가 표현하는 값은 양의 정수가 되고, 1일 경우 음의 정수가 됩니다. 

이렇듯 int의 32개 비트 중 하나의 비트는 부호를 나타내는 용도로 사용되는데(int가 아닌 다른 자료형도 마찬가지입니다), 그러면 자연스럽게 int가 절대값을 표현할 수 있는 비트의 개수는 31개가 됩니다. 결과적으로 int가 나타낼 수 있는 절대값의 범위는 최대 2의 31제곱까지입니다.

 

 

unsigned 자료형

 

자료형에 unsigned가 붙게 되면 부호가 없다는 의미가 되는데, 이는 곧 음의 부호(-)를 붙이지 않고 0 이상의 값만을 표현하겠다는 의미입니다. 앞서 int의 32개 비트 중 하나의 비트가 부호를 나타내는데 사용된다고 했는데, unsigned가 붙게 되면 부호를 나타내는 비트가 필요 없어집니다. 따라서 unsigned int는 32개의 비트 모두를 절대값(이 경우 양의 정수)을 나타내는데 사용합니다. 2의 32제곱이 unsigned int의 최대값이 되는 것입니다.

 

=> unsigned int 자료형이 표현할 수 있는 값의 범위 : 0 ~ 4,294,967,295

 

 

댓글
공지사항