이산수학
4장. 수의 표현
이진수의 연산
1
이산수학
출처
본 강좌 자료는 이산수학 (2학년 / 3학점/ 3시간 / 이론) 수업에서 사용한 교재 [이산수학 (수학으로 이해하는 디지털 논리), 한빛
아카데미 출판사] 의 내용 등을 출처로 작성하였음을 알리는 바입니다.
2
이산수학
학습 목표
■
컴퓨터에서 데이터 표현 및 연산 이해3
이산수학
학습 내용
■
컴퓨터의 산술 논리 연산장치■
이진수와 십진수간의 변환 방법■
이진수의 음수의 표현법■
비트 확장■
이진수의 덧셈, 뺄셈, 곱셈, 나눗셈 연산■
실수의 부동소수점 표기법4
이산수학
CPU의 산술 논리 연산장치 ALU의 구성요소
■
산술연산장치◻
+, −, ∗, / 등을 수행■논리
연산 장치◻
AND, OR, NOT, XOR 등을 수행■쉬프트 레지스터
◻
비트들을 좌우측으로 이동■
보수기◻
2진 데이터를 2의 보수로 변환◻
음수를 만드는 역할■상태 레지스터
◻
연산 결과의 상태를 나타내는 플래그들을 저장
5
이산수학
10진법
■
10진수(Decimal number)◻
기수를 10으로 하는 수 체계◻
0~9의 10개 기호와 10의 승수(10𝑛) 를이용해 수를 표현◻
정수 𝑛 에 대해 𝑘 > 0, 0 ≤ 𝑎0, 𝑎𝑘≤ 9𝑛10 = 𝑎𝑘𝑎𝑘−1 … 𝑎1𝑎0 = 𝑎𝑘10𝑘 + 𝑎𝑘−110𝑘−1+…+𝑎1101+𝑎0100
◻
실수 𝑛 에 대해𝑛10 = 𝑎𝑘𝑎𝑘−1 … 𝑎1𝑎0. 𝑎−1𝑎−2…𝑎−𝑙𝑎−(𝑙+1)…
= 𝑎𝑘10𝑘 + 𝑎𝑘−110𝑘−1+…+𝑎1101+𝑎0100 + 𝑎−110−1 + 𝑎−210−2+…+𝑎𝑙10𝑙+𝑎−𝑙10−𝑙 + 𝑎−(𝑙+1)10−(𝑙+1)+…
6
이산수학
예제
■
다음 10진수를 기수와 자릿수를 이용해 전개하시오. 523.156810 (풀이)523.621810 =
5 × 102+2× 101+3 × 100+6× 10−1+2× 10−2+1× 10−3+8× 10−4
7
이산수학
2진법
■
2진수 (Binary number)◻
기수를 2로 하는 수 체계◻
0과 1의 2개 기호와 2의 승수(2𝑘)를 이용해 수를 표현◻
정수 𝑛 에 대해 (𝑘 > 0, 𝑎0 , 𝑎𝑘 = 1 𝑜𝑟 0)𝑛2 =𝑎𝑘𝑎𝑘−1… 𝑎1𝑎0= 𝑎𝑘2𝑘+ 𝑎𝑘−12𝑘−1+…+ 𝑎121+ 𝑎020
◻
실수 𝑛 에 대해 (𝑘, 𝑙 ≥ 0, 𝑎 = 1 𝑜𝑟 0) 𝑛2 =𝑎𝑘𝑎𝑘−1… 𝑎1𝑎0. 𝑎−1 𝑎−2 … 𝑎−𝑙𝑎− 𝑙+1 …= 𝑎𝑘2𝑘+ 𝑎𝑘−12𝑘−1+…+ 𝑎121+ 𝑎020+ 𝑎−12−1+ 𝑎−22−2 + ⋯ + 𝑎−𝑙2−𝑙+𝑎−(𝑙+1)2−(𝑙+1)+…
8
이산수학
예제
■
다음 2진수를 기수와 자릿수를 이용해 전개하시오.10001.0011012 (풀이)
10001.0011012 = 1 × 24+ 1 × 21 + 1 × 2−3 +1 × 2−4 +1 × 2−6
9
이산수학
8진법
■
8진수 (Octal number)◻
기수를 8로 하는 수 체계◻
0~7의 8개 기호와 8의 승수(8𝑘)를 이용해 수를 표현◻
정수 𝑛 에 대해 (𝑘 > 0, 0 ≤ 𝑎0 , 𝑎𝑘 ≤ 7)𝑛8 =𝑎𝑘𝑎𝑘−1… 𝑎1𝑎0= 𝑎𝑘8𝑘+ 𝑎𝑘−18𝑘−1+…+ 𝑎181+ 𝑎080
◻
실수 𝑛 에 대해 (𝑘, 𝑙 > 0, 0 ≤ 𝑎0 , 𝑎𝑘, 𝑎𝑙 ≤ 7 ) 𝑛8 =𝑎𝑘𝑎𝑘−1… 𝑎1𝑎0. 𝑎−1 𝑎−2 … 𝑎−𝑙𝑎− 𝑙+1 …= 𝑎𝑘8𝑘+ 𝑎𝑘−18𝑘−1+…+ 𝑎181+ 𝑎080+ 𝑎−18−1+ 𝑎−28−2 + ⋯ + 𝑎−𝑙8−𝑙+𝑎−(𝑙+1)8−(𝑙+1)+…
10
이산수학
예제
■
다음 8진수를 기수와 자릿수를 이용해 전개하시오.712.32518 (풀이)
712.32518 =
7 × 82 +1 × 81 +2 × 80+3 × 8−1 +2 × 8−2 +5 × 8−3 +1 × 8−4
11
이산수학
16진법
■
16진수 (Hexadecimal Number)◻
기수를16으로 하는 수 체계◻
0~9와 A, B, C, D, E, F의 16개 기호와 16의 승수(16𝑘) 사용◻
컴퓨터는 8비트, 16비트, 32비트 단위로 데이터 처리◻
정수 𝑛 에 대해 (𝑘 > 0, 0 ≤ 𝑎0 , 𝑎𝑘 ≤ 9 , 𝐴 ≤ 𝑎0 , 𝑎𝑘 ≤ 𝐹) 𝑛16 = 𝑎𝑘 𝑎𝑘−1… 𝑎1𝑎0 = 𝑎𝑘16𝑘+ 𝑎𝑘−116𝑘−1+…+ 𝑎1161+ 𝑎0160◻
실수 𝑛 에 대해 (𝑘, 𝑙 > 0, 0 ≤ 𝑎0 , 𝑎𝑘, 𝑎𝑙 ≤ 9 , 𝐴 ≤ 𝑎0 , 𝑎𝑘, 𝑎𝑙 ≤ 𝐹) 𝑛16 =𝑎𝑘𝑎𝑘−1… 𝑎1𝑎0. 𝑎−1 𝑎−2 … 𝑎−𝑙𝑎− 𝑙+1 …= 𝑎𝑘16𝑘 + 𝑎𝑘−116𝑘−1 + ⋯ + 𝑎1161+ 𝑎0160+
𝑎−116−1+𝑎−216−2 + ⋯ + 𝑎−𝑙16−𝑙+𝑎−(𝑙+1)16−(𝑙+1)+…
12
이산수학
예제
■
다음 16진수를 기수와 자릿수를 이용해 전개하시오.9𝐵. 𝐹𝐸316 (풀이)
9𝐵. 𝐹𝐸316 =9 × 161 +𝐵 × 160 +𝐹 × 16−1+E × 16−2 +3 × 16−3 =9 × 161 +11 × 160 +15 × 16−1+14 × 16−2 +3 × 16−3
13
이산수학
진법 변환 관계
8진수
16진수
2진수 10진수
14
이산수학
10진수의 (2진수 | 8진수 | 16진수) 변환
■
정수부◻
기수로 몫이 0이 나올 때까지 나누어 얻은 나머지를 나열◻
가장 처음에 얻은 나머지는 최하위 자리(가장 오른쪽 자리)위치◻
가장 나중에 얻은 나머지는 최상위 자리(가장 왼쪽 자리) 위치■
실수부◻
실수부를 기수로 곱하여 실수부가 0이 되거나 반복되는 수가 나올 때까지 곱하기를 반복한 후 곱해 얻은 정수부의 값을 순서대로 나열◻
가장 처음에 얻은 정수부는 소수점에 가장 가까운 자리에 위치◻
가장 나중에 얻은 정수부는 소수점에 가장 멀리 있는 자리 위치
15
이산수학
예제
■
다음 십진수(13.625)10를 이진수로 변환하시오.(풀이)
(1) 13을 이진수로 변환 (13)10 = (1101)2
(2) 0.625의 이진수 변환 (0.625)10 = (0.101)2
(3) (13.625)10 = (1101)2 + (0.101)2 = (1101.101)2
16
이산수학
2진수와 8진수의 변환
■
2진수 ⇒ 8진수◻
주어진 2진수를 소수점 기준으로 각 세 자리 단위로 그룹화 후 10진수로 변환■
8진수 ⇒ 2진수◻
8진수의 각 자리를 세 자리의 2진수로 변환
17
이산수학
예제
■
다음 2진수 11100101.01001111012을 8진수로 변환하라.(풀이) 소수점을 기준으로 정수부와 실수부를 별개로 하여 각각 세 자리 단위의 블록을 만든다.
011 100 101 . 010 011 110 100
① ② ③ ④ ⑤ ⑥ ⑦
① 011 = 0 × 22 + 1 × 21 + 1 × 20 = 0 + 2 + 1 = 3
② 100 = 1 × 22 + 0 × 21 + 0 × 20 = 4 + 0 + 0 = 4
③ 101 = 1 × 22 + 0 × 21 + 1 × 20 = 4 + 0 + 1 = 5
④ 010 = 0 × 22 + 1 × 21 + 0 × 20 = 0 + 2 + 0 = 2
⑤ 011 = 0 × 22 + 1 × 21 + 1 × 20 = 0 + 2 + 1 = 3
⑥ 110 = 1 × 22 + 1 × 21 + 0 × 20 = 4 + 2 + 0 = 6
⑦ 100 = 1 × 22 + 0 × 21 + 0 × 20 = 4 + 0 + 0 = 4
∴11100101.01001111012=345.23648
18
이산수학
2진수와 16진수의 변환
■
이진수에서 십진수로 변환하고 다시 16진수로 변환◻
먼저 이진수를 4비트 단위로 그룹화◻
각각의 4비트들을 10진수로 변환◻
16진수로 변환■
16진수에서 10진수로 변환하고 다시 이진수로 변환◻
16진수의 각각의 자리 별로 십진수로 변환◻
십진수는 각각 4비트의 이진수로 변환
19
이산수학
예제
■
2진수 11100101.01001111012을 16진수로 변환하라.(풀이) 소수점을 기준으로 정수부와 실수부를 별개로 하여 각각 네 자리 단위의 블록을 만든다.
①1110 = 1 × 23 + 1 × 22 + 1 × 21 + 0 × 20 = 8 + 4 + 2 + 0 = 14 = E
②0101 = 0 × 23 + 1 × 22 + 0 × 21 + 1 × 20 = 0 + 4 + 0 + 1 = 5
③0100 = 0 × 23 + 1 × 22 + 0 × 21 + 0 × 20 = 0 + 4 + 0 + 0 = 4
④1111 = 1 × 23 + 1 × 22 + 1 × 21 + 1 × 20 = 8 + 4 + 2 + 1 = 15 = F
⑤0100 = 0 × 23 + 1 × 22 + 0 × 21 + 0 × 20 = 0 + 4 + 0 + 0 = 4
∴11100101.01001111012=𝐸5.4𝐹416
1110 0101 . 0100 1111 0100
① ② ③ ④ ⑤
20
이산수학
𝒓진수의 보수 (𝒓 = 𝟏𝟎 또는 2)
■
이진수의 음수 표현 방법■
보수(Complementary Number)◻
𝑟진수에서 두 종류의 보수가 존재◻
𝑟의 보수와 (𝑟 − 1)의 보수■
보수의 종류◻
이진수에서는 1의 보수와 2의 보수가 존재◻
십진수에서는 9의 보수와 10의 보수가 존재
21
이산수학
2진수의 1의 보수
■
𝑛자리수의 이진수 𝑁 에 대한 1의 보수 (2𝑛−1) − 𝑁■
이진수에서 1의 보수◻
2𝑛 : 1과 뒤이은 𝑛 개의 0으로 구성◻
2𝑛 − 1 : 𝑛 개의 1로 구성◻
1의 보수 : 𝑁에 대한 각 자리의 숫자를 각각의 1에서 뺀 것과 같다.
22
이산수학
예제
■
다음 (1011001)2에 대한 1의 보수를 계산하시오.(풀이)
𝑟 =2, 𝑛 =7, 𝑁 =1011001 27 -1 =1111111
(27 -1)- 𝑁 = 1111111– 1011001 = 0100110
23
이산수학
2진수의 2의 보수
■
𝑛자리수의 이진수 𝑁 에 대한 2의 보수 2𝑛 − 𝑁■
이진수의 1의 보수에 1을 더한다.◻
2𝑛 − 𝑁 = 2𝑛 − 1 − 𝑁 + 124
이산수학
예제
■
다음 (101100)2에 대한 2의 보수를 계산하시오.(풀이)
(1) 1의 보수 계산
𝑟 =2, 𝑛 =6, 𝑁 =101100 26 -1 =111111
(26 -1)- 𝑁 = 111111– 101100 = 010011 (2) 2의 보수
[(26 -1)- 𝑁] + 1 = 010011+1=010100
25
이산수학
컴퓨터의 데이터 표현 범위
■
2의 보수로 표현된 𝑛 비트 데이터의 경우에서 표현 할 수 있는 수의 범위:−2𝑛−1≤ 𝑁 ≤ 2𝑛−1 −1
■
비트에 따른 수의 범위와 최대값과 최소값의 표현◻
8비트 2의 보수 : -128 ≤ 𝑁 ≤ +127◻
16비트 2의 보수 : -32768 ≤ 𝑁 ≤ +32767■
부호가 존재하는 8비트 이진수의 표현에서 표현할 수 있는 십진수의 범위◻
부호화-절대치 표현: -(27 -1)≤ 𝑁 ≤ +(27 -1)◻
1의 보수: -(27 -1)≤ 𝑁 ≤ +(27 -1)◻
2의 보수: -27 ≤ 𝑁 ≤ +(27 -1)
26
이산수학
2의 보수로 표현된 이진수(𝒏비트)의 10진수 변환
■
2의 보수로 표현된 양수(최상위 비트: 𝑎𝑛−1 = 0)의 십진수 변환 𝐴 = 𝑎𝑛−2 × 2𝑛−2 + 𝑎𝑛−3 × 2𝑛−3 + ... + 𝑎1 × 21 +𝑎0 × 20■
2의 보수로 표현된 음수(최상위 비트: 𝑎𝑛−1 = 1)의 십진수 변환 𝐴 = -1 × 2𝑛−1 +𝑎𝑛−2 × 2𝑛−2 + 𝑎𝑛−3 × 2𝑛−3 + ... + 𝑎1 × 21 +𝑎0 × 20
27
이산수학
예제
■
다음 8비트를 사용하여 2의 보수로 표현된 101011102 을 10진수로 변환하시오.(풀이)
10101110 = - 128 + (1 × 25 + 1 × 23 + 1 × 22 + 1 × 21) = - 82
28
이산수학
비트확장
■
부호가 있는 데이터의 비트 수를 늘리는 연산■
8비트 데이터를 16비트 데이터로 확장하는 경우◻
2의 보수 표현◻
확장된 상위 비트들을 부호 비트와 같은 값으로 채운다.(예)
+21 = 00010101 (2의 보수, 8 비트)
+21 = 0000000000010101 (2의 보수, 16 비트) -21 = 11101011 (2의 보수, 8 비트)
-21 = 1111111111101011 (2의 보수, 16 비트)
29
이산수학
2의 보수에 의한 뺄셈 연산 (𝒏 bits 컴퓨터)
■
뺄셈 𝑀 − 𝑁 (𝑁 ≠ 0 )의 계산◻ 피감수 M에, 감수 N에 대한 2의 보수화하여 결과적으로 덧셈을
이용
◻
앞자리 올림수가 있는 경우 :1.
자리 올림수를 무시2.
얻은 결과가 음수인 경우 2의 보수를 취하고, 부호비트들 0으로 하고, 그 앞에 – 부호를 붙임◻
앞자리 올림수가 없는 경우:1.
얻은 결과가 음수인 경우 2의 보수를 취하고, 부호비트들 0으로 하고, 그 앞에 – 부호를 붙임30
이산수학
예제
■
8bits 컴퓨터에서 다음을 2의 보수를 이용해 연산하라.3310 − 1510 (풀이)
(1) 3310 − 1510 = 3310 + −1510
(2) 2의 보수 표현:+3310= 00100001, −1510= 11110001.
(3) 이진수 덧셈
11 1 00100001 + 11110001 100010010
(4) 33
10 − 1510 = 3310 + −1510 = 00010010 =1 × 24 + 1 × 21 =18무시
31
이산수학
예제
■
8bits 컴퓨터에서 다음을 2의 보수를 이용해 연산하라.−3810 − 7010 (풀이)
(1) −3810 − 7010 = (−3810) + −7010
(2) 2의 보수 표현:−3810= 11011010, −7010= 10111010 (3) 이진수 덧셈
1111 1 11011010 + 10111010
110010100 ⇒ 결과가 음수
∴ −3810 − 7010 = 10010100 =−128 + (1 × 24 + 1 × 22) = −108
무시
32
이산수학
컴퓨터의 실수 데이터 표현 방식
■
컴퓨터 프로그래밍이나 전자계산기 등에서는 밑수가 10인 경우에 로마자 E 또는 e를 사용하여 표시◻
−0.4는 − 0.04𝐸 + 1 , −0.04𝑒 + 1, −4𝐸 − 1 , −4𝑒 − 1■
부동소수점의 표현◻
소수점의 위치를 고정하지 않고 그 위치를 나타내는 수를 따로 적는 것으로, 유효숫자를 나타내는 가수(假數)와 소수점의 위치를 풀이하는 지수(指數)로 나누어 표현◻
컴퓨터에서는 고정 소수점 방식보다 넓은 범위의 수를 나타낼 수 있어 과학기술 계산에 많이 이용◻
부동 소수점으로 표현한 수는 실수를 근사값으로 표현33
이산수학
부동소수점 IEEE 754 표준
■
프로그래밍언어는 부동소수점의 실수에 대한 국제 표준을 준수◻
± 1. 𝑏𝑏𝑏𝑏 ⋯ 𝑏𝑏𝑏 × 2𝐸, where 𝐸 : 10진수, 𝑏: 2진수◻
(−1)𝑆(1 + 𝑀)2𝐸■
부호비트(𝑆) : 𝑠 =0 (+), 𝑠 =1 (-)■
지수(𝐸)필드 : 이진수로 표현◻
𝐸(지수) + 바이어스 상수 (2𝑛/ 2 – 1 = 2
𝑛−1– 1)
■
가수(𝑀 )필드: 유효숫자의 소수 부분 (𝑀)만 표현■
단정밀도(32비트) 의 표현 영역: 10-38 ~ 1038■
배정밀도(64비트)의 표현 영역: 10-308 ~ 1030834
이산수학
실수를 IEEE 754 단정밀도로 표현
1. 실수를 이진수로 변환
2. 이진수를 정규화 변환 : (−1)𝑆(1 + 𝑀)2𝐸 3. 32-bits 시스템 표현
1. 𝑆 = 0 (+), 𝑆 = 1 (-)
2. 지수(𝐸)필드 : 𝐸(지수) + 127
3. 가수(𝑀 )필드: 유효숫자의 소수 부분 (𝑀)만 표현
(예제) 5.25=1.0101 × 22 ⇒ 𝑆 = 0, 𝐸 =2+127=10000000, M=01010000000…0 ∴ 01000000001010000000000000000000
35
이산수학
예제
■
32bits 컴퓨터에서 𝑓𝑙𝑜𝑎𝑡 𝑥 = −(13.625)10 을 부동소수점 IEEE 754로 표현하시오.(풀이)
(1) (13.625)10= (1101.101)2 = 1.101101 × 23 (2) 단정밀도 형식으로 표시
- 부호(𝑆) 비트 = 1
- 지수(𝐸 )필드 = 3+127=00000011+ 01111111 = 1000 0010 - 가수(𝑀) 필드 = 10110100000000000000000
∴ 11000001010110100000000000000000
36