컴퓨터 개론 2장 2절: 데이터의 표현1-정수 표현 방법
출처 : 숭실대학교 글로벌미디어학부 정기철 교수님의 컴퓨터 개론 수업을 듣고 정리했습니다.
1. 정수의 표현
정수(Integer)
- 셀 수 있는 수를 의미
- 정수의 구성 : 음의 정수, 0, 양의 정수
- 부호 없는 정수(unsigned integer) - 0과 자연수를 표현
- 부호 있는 정수(signed interger) - 음수, 0, 양수
부호 없는 정수(unsiged Integer)
- 부호를 생략한다는 의미로, 모든 숫자는 0 또는 양의 정수(자연수)
- 8비트로 부호 없는 정수를 표현하면 0~255까지 나타낼 수 있음
- N비트를 이용한 부호 없는 정수 표현은 0부터 $(2^n-1)$까지 가능
- 부호 없는 정수에서 2진법을 이용한 사칙연산 방법은 기본적으로 10진법에서의 연산 방법과 동일
- 덧셈 연산 : 2진법의 가장 오른쪽 비트인 최소유효비트(LSB: Least Significant Bit)부터 시작해 각 비트의 수를 더하고, 1+1로 자리올림이 발생하면 상위 자리로 1을 올리면 됨
- 오버플로우(Overflow) : 덧셈의 결과가 8비트로 표현할 수 있는 범위를 넘어선 상황
- 컴퓨터 내부에서는 논리적으로 정확한 결과를 냈다 하더라도, 표현 가능한 범위를 벗어났기 때문에 실제 수행 결과는 옳은 값이 아님! 즉, 계산 결과를 정확히 표현할 수 없음
- 실제로 컴퓨터 프로그래밍 시 아주 큰 수끼리의 연산에서 오버플로우가 발생함
- 문제는 연산 결과에 오류가 나더라도 프로그램을 계속 실행된다는 점, 틀린 값을 정확히 체크하지 않으면 최종 결과에 영향을 미침
- 컴퓨터는 오버플로우를 감지하지 못할까? 감지할 수 있지만, 체크하지 않는다! 모든 연산마다 체크를 하게 되면 연산 속도가 너무 느려지기 때문이다.
- Underflow? 실수 표현에서만 발생할 수 있다.
부호 있는 정수(Signed integer)
- 부호화 절댓값(Signed-magnitude) 표현
- 가장 왼쪽에 위치한 비트인 최대유효비트(MSB: Most Significant Bit)가 0이면 양의 정수(+0 포함)로, 최대 유효 비트가 1이면 음의 정수(-0 포함)로 표현하는 방식
- n비트를 이용한 부호화 절댓값 표현은 -(2^(n-1) - 1) ~ +(2^(n-1) - 1)까지 가능
- 부호화 절댓값 표현의 단점
- 0이 +0과 -0으로 2개기 때문에 표현할 수 있는 숫자가 하나 줄어든다.
- 부호를 일일이 따져야 하기 때문에 연산 속도가 느리다.
- 컴퓨커 내부적으로는 부호화 절댓값 표현을 거의 쓰지 않는다.
- 보수(Complement) 표현
- 보수 : 두 수의 합이 진법의 밑수(N)가 되게 하는 수
예) 10진수 2의 10의 보수는 8, 10진수 6의 10의 보수는 4 - 2의 보수는 절댓값이 같고 부호가 다른 두 수
예) 0000 1010(2)의 2의 보수는 1111 0110(2) - NOT을 이용한 2의 보수 구하기
원래 수의 0과 1을 반대로 바꾸고, 1을 더한다. - 컴퓨터는 2의 보수 표현이 음수인지 양수인지 구별하지 않는다. 그냥 그 자체로 컴퓨터가 이해할 수 있는 숫자인 것이다. 음수인지 양수인지 구별하는 것은 사람이 읽기 위해서이다.
- 보수 : 두 수의 합이 진법의 밑수(N)가 되게 하는 수
정수 표현들의 표현 가능한 범위
- Unsgined Integer : 0 ~ $2^n-1$
- Sign and Magnitude : -(2^(n-1) - 1) ~ (2^(n-1) - 1)
-
2’s Complement : -2^(n-1) ~ 2^(n-1) -1
- 컴퓨터 내부에서 곱셈 연산은 덧셈을 반복적으로 하고, 나눗셈은 뺄셈을 반복한다. 단 정수에서만!