본문 바로가기

6. 컴퓨터 공학 공부

[109] 컴퓨터구조 06차시 정수의 산술연산과 논리연산

1. 2진수의 부호 변환

가. 어떤 수에 대해 2의 보수를 구하면 됨.

나. (예) -19 표현

1) 19를 2진수(8비트)로 표현

19(10) -> 00010011(2)

2) 1의 보수를 구함.

00010011(2) -> 11101100(2)

3) 1을 더함(2의 보수)

11101100(2) -> 11101101(2)

-19를 2진수(8bit)로 표현하면 11101101(2)이 됨.

4) 최상위 비트는 부호비트

11101101(2) 는 최상위 비트가 1이므로 음수(+238이 아님)

11101101(2)에 대한 2의 보수는 00010011(2)이므로 -19 확인

2. 2진수의 정수 덧셈

가. 같은 자리의 수끼리 더함.

1) 0 + 0 = 0

2) 0 + 1 = 1

3) 1+ 0 = 1

4) 1 + 1 = 10(자리 올림 발생)

나. 오버플로우 상태

덧셈결과가 표현할 수 있는 범위를 초과하여 결과값이 틀리게 되는 상태

십진수 64 + 64 = 128이지만 8bit로 128을 표현할 수 없음.

01000000(64) + 01000000(64) = 10000000(-128)

3. 2진수의 정수 뺄셈

가. 뺄셈 형식

\( A \: - \: B \)

피감수: 빼지는 수(A)

감수: 빼는 수(B)

나. 계산 방법

2의 보수를 사용하여 감수의 부호를 바꾸고 피감수에 더함.

최상위 비트에서 자리 올림이 일어나면 무시

다. 오버플로우

뺄셈 결과가 범위를 초과하여 틀리게 되는 상태

64 - (-64) = 64 + 64이므로 오버플로우 발생

 

3. 2진수의 정수 곱셈

가. 곱셈 형식

\( A \: \times \: B \)

피승수: 곱하여 지는 수(A)

승수: 곱하는 수(B)

나. 부호가 없는 2진수의 곱셈

10진수 곱셈 세로셈하듯이 2진수 곱셈 진행

2진수는 1과 0밖에 없으므로, 피승수를 그대로 쓰거나 0을 쓰거나 둘 중 하나임.

N비트 2진 정수를 곱한 결과값의 길이는 최대 2N 비트가 됨.

다. 부호가 있는 2진수의 곱셈

1) 음수를 양수로 변환

2) 부호가 없는 2진수의 곱셈 수행

3) 피승수와 승수의 부호가 다르면 2의 보수를 취해서 음수로 변경

4. 2진수의 정수 나눗셈

가. 나눗셈 형식

\( A \: \div \: B \: = \: C \: \cdots \: D \)

피제수(Dividend): 나누어지는 수(A)

제수(Divisor): 나누는 수(B)

몫(Quotient): 나눗셈의 결과(C)

나머지(Remainder): 나머지 수(D)

나. 부호 없는 2진 정수의 나눗셈

10진수의 나눗셈을 하듯이 세로셈으로 계산

피제수를 앞에서부터 보며 제수보다 크면 1, 작으면 0을 몫의 자리에 기입(2진수라 0 아니면 1 밖에 없음)

다. 부호가 있는 2진 정수의 나눗셈

1) 음수를 양수로 변환

2) 부호가 없는 2진 정수의 나눗셈 수행

3) 피제수와 제수의 부호가 다르면 몫에 2의 보수를 취함.

라. 소수 계산의 문제점

1) 지수 오버플로우(Exponent Overflow)

양의 지수값이 최대 지수값을 초과하는 오류

수가 너무 커서 표현될 수 없음을 의미

\(+\infty\) 또는 \(-\infty\)

2) 지수 언더플로우(Exponent Overflow)

음의 지수값이 최대 지수값을 초과하는 경우

수가 너무 작아서 표현될 수 없음을 의미

0으로 표시

3) 가수 언더플로우(Mantissa Underflow)

가수의 소수점 위치 조정 과정에서 비트들이 가수의 우측 편으로 넘치는 경우

반올림(Rounding)으로 문제 해결

4) 가수 오버플로우(Mantissa Overflow)

같은 부호를 가진 두 가수들을 덧셈하였을 때 올림수가 발생하는 경우

재조정(Realignment) 과정을 통해 정규화로 해결