정수계열 기본 자료형을 보면 '부호있는(부호없는) XX 비트 정수입니다' 라는 표현을 MSDN에서 보게 됩니다

부호 있는게 뭐고 부호 없는게 무엇일까요?
다들 아실테지만,
이 말은 +, - 부호가 있느냐 없느냐 하는 것입니다
수를 표현하기 위해 가장 왼쪽 비트를 부호 비트로 사용하느냐, 사용하지 않느냐는 의미입니다
만일 부호비트를 사용하지 않는다면 그 만큼 더 큰 수를 표현할 수 있겠죠
이와 관련해서는 다음의 글을 참고해 주세요
정수 데이터의 표현 방식
sbyte 라는 자료형이 있습니다. sbyte 는 부호있는 8bit 정수이죠
1sbyte 는 8bit 이고, 이 중 가장 왼쪽 비트는 부호비트로 사용됩니다
따라서 부호비트를 뺀 7bit 로 수를 표현하게 됩니다
7bit로 표현가능한 수의 범위는 어떻게 될까요?
1bit 에는 0 과 1 을 표현할 수 있습니다. 즉 하나의 bit에 2개의 범위(0,1)를 표현할 수 있습니다
그럼 2bit는 어떨까요?
1bit 에 2개를 표현할 수 있으나, 2bit 에는 2 * 2 만큼 표현 가능하겠죠
마찬가지로 3bit 는, 2 * 2 * 2 만큼의 수를 표현할 수 있습니다
결론적으로 다음과 같은 공식이 성립됩니다
n bit로 표현할 수 있는 수의 범위 = 2^n 개가 됩니다
그럼, 다시 부호비트를 뺀 7bit 로 표현가능한 수의 범위는 128 개가 되네요
이 말은 정수 128까지 표현가능하다는것이 아니라 128개까지 표현가능하다는 것입니다
0 부터 시작하기 때문에 양의 정수를 보면 0 ~ 127 (총 128개)까지 표현이 가능한 것입니다
(엄밀히 말해 0은 양의정수는 아니죠.. 0은 0일 뿐입니다 ^^;)
다시말해, sbyte는 0을 포함한 양의정수 0 ~ 127 와 음의 정수 -1 ~ -128 개까지 표현가능합니다
아래 표는 정수형 데이타타입의 부호있는, 없는 형식입니다
Bit 수 |
부호 있는 |
부호 없는 |
8bit |
sbyte |
byte |
16bit |
short |
ushort |
32bit |
int |
uint |
64bit |
long |
ulong |
만일, 음수가 필요 없는 정수를 사용한다고 하면,
굳이 부호 있는 자료형을 사용해서 비트를 낭비(?) 하느니,
부호 없는 자료형을 선택해서 더 넓은 범위의 수를 저장할 수 있도록 하는 것도 나빠 보이지는 않습니다