부호비트
최상위비트(MSB : Most Significant Bit)는 부호비트라고 하는데
부호비트가 0이면 양수, 1이면 음수를 나타낸다.
2진수의 계산
10진수 1은 2진수로 00000001 이다.
그러면 음수인 -1은 2진수로 얼마일까?
흔히 10000001이라고 생각하기 쉽지만,
실제로 10진수 -1 의 2진수는 11111111이다.
컴퓨터는 빼기 연산을 할 수 없기 때문에
대신 빼기 연산을 덧셈처럼 수행한다.
1-1=0이 1+(-1)와 같은 것과 같다.
2의 보수를 이용하면 위와 같이
덧셈으로 뺄셈 계산이 가능하다.
2의 보수를 이용해서 1-1을 계산해보자.
먼저 1을 -1로 바꾼다. 그다음 1-1 을 계산한다. 2진수로 00000001(8자리) + 11111111(8자리) = 100000000 (9자리)가 되어 버린다. 9번째 자리가 넘쳐 1이 되었지만 2진수로 계산할 때, 범위를 넘어서는 자리는 버리므로 값에 포함되지 않는다. 따라서 결과값은 00000000 (2진수) = 0 (10진수) 가 된다. |
연산 결과가 음수인 경우에는 어떻게 될까?
2-4를 계산해보자
2는 2진수로 00000010 이고, 4는 00000100 이다. 결과값의 최상위 비트가 1이므로 음수인 걸 알 수 있다. 11111110 이 -2가 맞는지 확인해 보려면 다시 2의 보수를 취해서 2가 되면 된다. 11111110 의 2의 보수는 00000010 으로 10진수 2가 맞다. |
음수를 취급하는 자료형
unsigned 키워드가 붙은 자료형은
음수를 취급하지 않는 대신에
더 많은 양수값을 표현할 수 있다.
예를 들어 short 자료형은
2 바이트 크기를 사용하므로
2의 16제곱, 즉 65,536 개의 값을 표현할 수 있는데
short형은 -32,768 ~ 32,767 까지,
unsigned short형은 0 ~ 65,535 까지 표현 가능하다.
이는 부호 비트가 필요 없으므로
최상위 비트를 더 많은 값을 표현하는데 사용할 수 있기 때문이다.
참고로 음수 사용이 가능한 자료형에서
양수의 범위는 0 ~ 32,767 이고,
음수의 범위는 -1 ~ -32,768 까지 인데
음수가 하나 더 큰 이유는
0이 양수 자리를 하나 차지하기 때문이다.
실제 0은 양수도 음수도 아니지만
부호비트 때문에 0은 양수에 포함된다.
'개발_기타 > 미분류' 카테고리의 다른 글
리다이렉트 (Redirect), 포워딩 (Forward) 방식의 차이 (0) | 2021.01.17 |
---|---|
데이터 전송 방식 (GET, POST) (0) | 2021.01.17 |
자주 쓰는 이클립스(Eclipse) 단축키 모음 (0) | 2021.01.10 |
비주얼 스튜디오 코드 (VSC, Visual Studio Code) 단축키 (0) | 2021.01.10 |
웹브라우저 디버거 단축키 (0) | 2019.05.08 |