정수(integer)
구성요소
- 양의 정수 : 1, 2, 3
- 0
- 음의 정수 : -1, -2, -3
부호 없는 (unsigned)
- 음의 정수는 표현 불가
부호 있는(signed)
- 양의 정수, 0 , 음의 정수 가능
부호 존재 여부에 따라 자료형이 표현 가능한 수의 범위가 달라진다.
부호 없는 (unsigned)
비트 8개를 쓰고 있기 때문에 최대 표현의 수는 256개다. (0 ~ 255)
만약 1111 1111(2) + 1(2) 를 더하면 무슨일이 발생할까?
1 0000 0000이 된다. 하지만 1바이트당 표현 할 수 있는 비트는 8개이기 때문에 앞에 1은 버려지게 된다.
예상 결과가 최댓값보다 커질 때 오버플로가 발생한다.
만약 1111 1111(2) + 10(10)과 1 0000 000(2) +
9(10) 더하면 무슨일이 발생할까?
똑같이 1 0000 1001(2) 된다. 하지만 오버플로로 인해 동일하게 가장 앞자리는 1은 버려지고, 각각 10이 표현된다.
넘쳐진 수는 버려지고 나머지만 남게 된다.
부호 있는 (signed)
음의 기호(-)를 어떻게 표현 방법은
1비트는 부호표현, 7비트는 숫자표현 -> 범위는 -127 ~ 127
8비트 중 가장 맨 앞 비트가 0이면 양수 1이면 음수다.
부호 절대 값 표기법
최상위 비트만 사용하여 음수, 양수를 구분
양수 0000 0000(2) / 음수 1000 0000(2)
하지만 한계가 있다.
- 0000 0000(2) 와 1000 0000(2)는 +0 / - 0으로 0이 2개가 된다.
- 양수와 음수를 더할 때 비트패턴으로 인한 오류가 발생한다. 왜냐하면 컴퓨터는 덧셈만 할 수 있기 때문이다.
보수(complement)
보수는 보충을 해주는 수를 의미한다. 현재의 숫자에서 자릿수가 1단계 올라갈 수 있는 수가 몇인지를 구하면 된다.
N진법에는 두 가지 보수가 있음
N의 보수
N - 1의 보수
10의 보수
- 10이 되기 위해 필요한 수
- 2는 10의 보수는 8
- 7은 1의 보수는 3
- 즉, 10의 보수는 10의 n승이 되기 위해 필요한 수를 뜻한다.
만약 324 - 4를 구하려면 320 - 4 + 1000 - 1000으로 계산을 한다.
1. -4 + 1000 = 996
2. 320 + 996 = 1316
3. 1316 - 1000 = 316
4. 결과 값은 316이 된다.
1의 보수
구하는 방법은 2의 n승이 - 1 - N
1의 보수를 구하는 가장 좋은 방법은 각 비트를 뒤집으면 된다.
1001 1001(2) > 0110 0110(2)
1의 보수를 하는 방법
n자리수를 가면 이진수의 n의 1의 보수는 2의 n승 - 1 - N
예) 1001 1001(2)의 1의 보수 구하기
가장 쉽게 구하는 방법은 각 비트를 뒤집으면 된다.
1001 1001 => 0111 0110(2)
양수는 0000 0001 <-> 음수 1111 1110
장점
- 간단히 뺄셈가능
한계점
- 0이 두개다
- 컴퓨터가 사용하기에 아직도 2%복잡
예) 0000 0010 = 2
+ 1111 1110 = -1
------------------
1 0000 0000
+ 1
재차 1을 더해줘야한다.
------------------
0000 0001
최소값이 작은 값이 결과로 나오는 경우를 언더플로라고 한다.
오버플로 <-> 언더플로
'소프트웨어 공학용 수학' 카테고리의 다른 글
컴퓨터의 유리수 표현(고정소수점, 부동소수점) (0) | 2022.10.02 |
---|---|
ASCII(아스키)코드 (1) | 2022.09.25 |
다양한 진법과의 관계 (0) | 2022.09.23 |
비트와 바이트 (0) | 2022.09.19 |
진수 변환 및 2진법, 8진법, 16진법 (0) | 2022.09.18 |