signed와 unsigned의 차이와 정수 자료형
개요
이번 포스팅에서는 signed와 unsigned가 각각 무엇이며 어떤 차이가 있는지와 signed가 음수를 표현하는 방법, 정수 자료형의 크기 및 범위에 대해 살펴본다.
signed와 unsigned가 무엇인가?
signed와 unsigned는 둘 다 수를 표현하는 수단이다.
이 둘을 간단히 요약하자면 다음과 같다.
- signed : 부호를 갖는(0을 포함한 양수/음수 구분) 변수 선언. 일반적으로 unsigned 없이 변수를 선언하면 signed 자료형이다.
- unsigned : 음수를 사용하지 않겠다.
signed가 음수를 표현하는 방법
컴퓨터가 수를 표현하는 방법
컴퓨터는 수를 0 또는 1로 구성된 이진법 체계로 표현하고 이해한다.
예를 들어 우리에게 7인 것은 컴퓨터에게는 111이다.
MSB(Most Significant Bit)
만약 -7을 컴퓨터가 표현하려면 어떻게 해야 할까? -111이라고 할까?
우리는 마이너스가 붙은 수를 보면 음수로 이해하고, 음수를 표현할 때도 그저 마이너스만 붙이면 되지만 아쉽게도 컴퓨터에는 그런 간결한 방법이 없다. 앞서 컴퓨터는 수를 0 또는 1로 구성된 이진법 체계로 표현하고 이해한다고 했는데, 사실 컴퓨터는 0과 1 말고는 이해를 못 하는 바보다.
따라서 0과 1만으로 음수를 표현해야한다. 대체 어떻게?! 바로 MSB(Most Significant Bit)를 이용해서!
MSB는 이름부터가 가장 중요한 비트이며, 보통 가장 왼쪽 첫 번째 비트다. 이 친구는 signed 자료형에서 사용되며 부호를 구분하기 위해 존재한다.
- 양수 : MSB가 0
- 음수 : MSB가 1
MSB가 1인 경우, 즉 음수인 경우에는 2의 보수를 이용해 수를 나타낸다. 이 경우 2^n을 빼면 된다.
unsigned와 signed의 차이
둘의 가장 큰 차이는 음수를 표현할 수 있는가 없는가다. 즉, MSB를 쓰는지 안 쓰는지가 둘의 차이다.
MSB를 쓰고 안 쓰고에는 큰 차이가 있다. 만약 unsigned와 signed가 각각 4비트라면 저장할 수 있는 수의 범위가 어느 정도 차이가 날까?
unsigned
위의 그림을 보면 unsigned는 MSB 없이 4비트 전부를 숫자를 저장하는데에 쓸 수 있다. 0000(0)부터 1111(15)까지를 저장할 수 있다. 이를 일반화하면 다음과 같다.
- n bit로 표현할 수 있는 unsigned의 범위 : 0 ~ 2^n - 1
signed
반면에 signed는 MSB가 있으므로 나머지 3개의 비트로만 숫자를 표현해야한다.
위와 같이 -8부터 7까지의 숫자를 나타낼 수 있다. 이를 일반화하면 다음과 같다.
- n bit로 표현할 수 있는 signed 범위 : 2^(n-1) ~ 2^(n-1) - 1
따라서 signed에 비해 unsigned가 저장할 수 있는 양수 범위가 두 배다.
정수형 크기 및 범위
unsigned는 양수만 표현하므로 양수의 범위가 signed에 비해 두 배임을 알 수 있다.