부호의 존재 여부에 따라 표현가능한 범위가 달라진다.
비트 수에 따라 다양한 자료형으로 사용가능하고 표현가능한 수의 범위도 달라진다.
음수를 허용하지 않는 자료형
Unsigned char 라고 가정하면 표현 가능 범위는 0 ~ 255 (2^8)
Unsigned char 자료형끼리 연산결과를 같은 자료형에 대입하려고하면
11111111
(255) + 00000001
(1) => 100000000
1
(버려짐) // 00000000
(실제결과)01011111
(95) - 10001011
(117) = 11101010
(234)음수도 표현 가능한 자료형
부호를 어떻게 표현할까?
처음 1비트를 부호표현에 사용한다(양수:0, 음수:1) + 숫자 7비트
8비트로 표현 가능한 정수의 범위
-127
~ 0
) ~ (0
~ 127
)00010001
(17) + 01111100
(124) = 14111111000
(-120) + 10001010
(-10) = -130보수
10의 보수 : 10^n이 되기 위해 필요한 수
9의 보수 : 9가 되기 위해 필요한 수 (10^n - 1)
자리수가 고정되어있는 경우 보수를 이용한 뺄셈이가능하다.
아래의 예시는 4자리만 표현가능한 계산기에서 보수를 이용한 10진수 뺄셈.
- 10진수
- 0012
- 0003
- 0012 + (10000 - 0003)
- 0012
+ 9997
(-3의 10의 보수)1
0009 (오버플로)- 0009 = 9
1의 보수 (2진법)
모든 자리수가 1이 되게 만드는 데 필요한 수
각 비트를 뒤집으면 됨
한계점 : 0이 2개다, 약간의 예외상황이 있음
2진수 | 10진수 | 2진수 | 10진수 |
---|---|---|---|
0000 0000 | 0 | 1111 1111 | -0 |
0000 0001 | 1 | 1111 1110 | -1 |
0000 0010 | 2 | 1111 1101 | -2 |
... | ... | ... | ... |
0111 1110 | 126 | 1000 0001 | -126 |
0111 1111 | 127 | 1000 0000 | -127 |
2의 보수 (2진법)
2진법에서 2는 2진수 10
을 의미한다. 즉 2의 보수는 한 자리 올라가게 만드는 수
현재 가장 널리 쓰이는 방법
2의 보수 구하는 쉬운 방법
0을 한번만 사용하기 때문에 -128까지 표현 가능하다.
2진수 | 10진수 | 2진수 | 10진수 |
---|---|---|---|
0000 0000 | 0 | ||
0000 0001 | 1 | 1111 1111 | -1 |
0000 0010 | 2 | 1111 1110 | -2 |
... | ... | ... | ... |
0111 1110 | 126 | 1000 0010 | -126 |
0111 1111 | 127 | 1000 0001 | -127 |
1000 0000 | -128 |
아래의 예시는 4자리만 표현가능한 계산기에서 보수를 이용한 2진수 뺄셈.
- 2진수
- 1100
- 0011
- 1100 + (10000 - 0011)
- 1100
+ 1101
(-0011의 2의 보수)1
1001 (오버플로)- 1001 = 9
음수를 보수로 표현할 수 있고! 컴퓨터는 2의 보수로 음수를 표현한다