-
Lecture 4 : 진수 변환 및 계산디지털 회로개론 2021. 10. 6. 02:02728x90
The Decimal Value of Signal Numbers(신호 숫자 10진수 변환)
1) Sign - Magnitude
Sign Binary -> Decimal number
ex) 10101010 -> sign binary(MSB : 음수) 0101010(Magnitude : (2^5) + (2^3) + (2^1) = 32 + 8 + 4
=42
MSB가 음수이므로 => -42
ex) 13 -> 8-bit binary number in the sign-magnitude system
13 = 8 + 4 + 1 => 0001101 => 여기에다가 MSB 0을 붙여주면 00001101 입니다.
2) 1's Complement
1)양수MSB가 양수일때, 모든 bit를 10진수로 전환시킵니다.ex) 01010101 = (2^6) + (2^4) + (2^2) +(2^0) = 64 + 16 +4 +1 =85
2)음수MSB가 음수일때, Sign bit에다가 음수 형태를 취하고 나머지 magnitude 10진수로 전환후 모두 더하고 마지막에 1을 더해줍니다.ex) 10101010 = (-2^7) + (2^5) + (2^3) + (2^1) = -128 + 32 + 8 + 2 = -86
-86에다가 + 1 = -85
ex) -27 -> 8-bit binary number in the 1's Complement system
27 = 16 + 8 + 2 + 1 => 00011011 => 11100100 입니다.
3) 2's Complement
ex) 01010110 = (2^6) + (2^4) + (2^2) + (2^1) = 64 + 16 + 4 + 2 = 86
ex) 10101010 = (-2^7) + (2^5) + (2^3) + (2^1) = -128 + 32 +8 + 2 = -86
보통 2's Complement를 많이 사용합니다. 1's Complement가 오류가 많기 때문입니다.예를들어 1's Complement 에서 00000000 과 11111111는 같은 값을 갖게 됩니다.
00000000 = 11111111 = (-2^7) + (2^6) + (2^5) + (2^4) + (2^3) + (2^2) + (2^1) + (2^0) = -128 + 127 = -1
-1 에다가 1을 더하면 0입니다.
ex) -49 -> 8-bit binary number in the 2's Complement system
49 = 32 + 16 + 1 => 00110001 => 11001111입니다.
Range of Signed Integer Number(신호 정수 숫자의 범위)
2's Complement 에서 범위는 (-2^n-1) ~ (2^n-1) -1 입니다.
양수가 1이 적은 이유는 0도 양수 취급해주기 때문입니다.
ex) 4-bit 의 범위는 (-2^4-1) ~ (2^4-1) - 1 = -8 ~ 7 입니다.
ex) 32-bit 의 범위는 (-2^32-1) ~ (2^32-1) -1 = -2147483648 ~ 2147483647 입니다.
Floating-Point Numbers
매우 큰수를 표현하기 위해 사용합니다. 그렇기 때문에 많은 bit를 사용해야합니다.
floating-point number 시스템은 이러한 문제를 효율적으로 나타내기 위해 사용됩니다.
floating-point number 에서는 MSB의 신호를 넘어서 또 다른 2개의 신호가 존재합니다.
Mantissa : magnitude를 나타냅니다.
Exponent : 쉽게 말해 소수점을 나타냅니다.
ex) 124,822,100 이러한 큰 수는 0.1248221 * 10^9 로 나타낼 수 있습니다.
여기서 1248221은 mantissa이고 9는 exponent입니다.
ex) 32480 => 111111011100000 = 1.11111011100000 * 2^14
mantissa : 11111011100000, exponent : 14 입니다.
따라서 부호는 양수이므로 MSB는 0, exponent부분은 14 + 127 = 141 => 10001101 입니다.
fraction 부분은 mantissa에다가 최종 bit수가 32가 될때까지 0을 뒤에 붙여줍니다.
최종적으로 32480 => 01000110111111011100000000000000 입니다.
Arithmetic Operations with Signed Numbers(signed number의 계산)
signed number의 계산은 오직 2's Complement에서만 적용됩니다.
Addition with Signed Numbers(덧셈)
1) Both numbers positive
ex) 0000111(7) + 00000100(4) = 00001011(11)
2) Positive number with magnitude larger than negative number (ex(8 > -2)) (the carry is dicarded)
8-bit를 넘어가는 Carry는 버립니다.
ex) 00001111(15) + 11111010(-6) = 100001001 => 00001001(9)
3) Negative number with magnitude larger than positive number (ex( -8 < 2))
ex) 00010000(16) + 11101000(-24) = 11111000(-8)
4) Both numbers negative (the Carry is discarded)
ex) 11111011(-5) + 11110111(-9) = 111110010 => 11110010(-14) 입니다.
Overflow
합의 결과가 제한된 bit범위를 초과하는 것을 말합니다.
Overflow는 계산할 두수의 부호가 같을때 발생합니다.
만약에 두수의 합의 결과의 MSB가 두 수의 MSB와 다를때 Overflow가 발생합니다.
ex) 01111101(125) + 00000111(7) = 10000100(-124) 양수를 더했지만 두수의 합의 결과의 MSB가 음수가 나왔습니다.
또한 십진수로 봤을때, 125 + 7은 132가 나와야하는데 -124가 나왔습니다.
8bit의 범위는 -128 ~ 127 이므로 132는 범위에서 벗어납니다.
따라서 Overflow가 발생합니다.
Subtraction(뺄셈)
뺄셈은 덧셈과 매우 유사합니다.
예를들어 9(minued) - 6(subtrahend)은 9 + (-6)과 똑같기 때문입니다.
뺄셈을 하기전에 subtrahend부분을 2's Complement를 취해줍니다.
또한 8-bit를 넘어가면 Carry를 버립니다.
ex) 00001000(8) - 00000011(3) = 00001000 + 11111101 = 100000101 => 00000101 => 5
ex) 11100111(-25) - 00010011(-19) = 11100111 + 11101101 = 111010100 => 11010100 => -44
Multiplication(곱셈)
1) Direct addition
말그대로 곱셈을 덧셈으로 하는 방식입니다.
예를 들어 8 * 3은 8 + 8 + 8과 똑같습니다.
ex) 01001101(Multiplicand) * 00000100(Multiplier)(4)
=> 01001101 + 01001101 + 01001101 + 01001101 = 0100110100
2) Partial products
일반적인 곱셈하는 방식과 매우 유사합니다.
ex) 01010011 * 11000101
s1 : 먼저 곱을 할 두수의 MSB를 비교해 최종결과의 MSB를 정해줍니다.
s2 : 그 다음 Multiplier의 2's Complement를 취해줍니다.
s3 : s1에서 음수면 s2의 결과값에 2's Complement를 취해줍니다.
Division(나눗셈)
나눗셈은 뺄셈과 연관이 있습니다.
예를들어 21(Dividend) / 7(Divisor) = 21 - 7 - 7 - 7 => 0 -> Quotient : 3 입니다.
ex) 01100100 / 00011001
s1 : 먼저 나눌 두 수의 MSB를 고려해 최종 Quotient의 MSB를 정합니다.
s2 : Divisor의 2's Complement를 취해줍니다.
s3 : Dividend 와 Divisor의 2's Complement를 취해준 값을 0이 나올때 까지 더해줍니다.
8-bit를 넘어가는 Carry는 계속 버려줍니다.
계속 더해서 0이 나오면 지금까지 나온 Quotient(몫)에다가 1을 더해줍니다.
Hexadecimal Numbers(16진수)
16진수 = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
10진수 = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
16진수는 F(15) 넘어서 10(16), 11(17), 12(18)......1E(31), 20(32)...... 이어 집니다.
Binary-to-Hexadecimal Conversion (2진수를 16진수로 변환)
2진수를 4-bit단위로 나누어 집니다. 그 다음 4-bit씩 16진수로 변환 시킵니다.
ex) 1100101001010111 = 1100 | 1010 | 0101 | 0111 = C | A | 5 | 7
Hexadecimal-to-Binary Conversion (16진수를 2진수로 변환)
각 16진수 bit를 적절한 2진수 4-bit 형식으로 바꾸어줍니다.
ex) 10A416 = 1 | 0 | A | 4 | 1 | 6 = 0001 | 0000 | 1010 | 0100 | 0001 | 0110
Hexadecimal-to-Decimal Conversion (16진수를 10진수로 변환)
2진수를 10진수로 바꾸는 방법과 똑같습니다.
자릿수에 맞춰 16의 제곱을 곱해주고 더해줍니다.
ex) E5 = 14 * (16^1) + 5 * (16^0) = 224 + 5 = 229
Decimal-to-Hexadecimal Conversion (10진수를 16진수로 변환)
10진수를 2진수로 바꾸는 방법과 똑같습니다.
ex) 650을 16진수로 바꾸면
따라서 2 / 8 / 10 = 28A 가 됩니다.
Hexadecimal Addition (16진수 덧셈)
일반적인 덧셈과 비슷합니다.
2진수는 더했을때 1이 넘어가면 Carry가 생기고
10진수는 더했을때 9가 넘어가면 Carry가 생기므로
16진수도 15가 넘어가면 Carry가 생깁니다.
ex) 3F(63) + 2A(42)
F(15) + A(10) = 25이므로 25는 16진수로 19이므로 1의 Carry가 발생합니다.
3 + 2 + 1(Carry) = 6이므로
최종 답은 16진수로 69가 됩니다. 10진수로는 105가 됩니다.
Hexadecimal Subtraction (16진수 뺄셈)
일반적인 뺄셈과 비슷합니다.
ex) 94(148) - 5C(92)
먼저 일의 자리를 보면 4 - C(12) 이므로 옆에 10의 자리에서 값을 빌려와야합니다.
따라서 옆에 10의 자리 9에서 16을 빌려옵니다.
그러므로 빌려온 16에서 C(12)를 빼고 4를 더하면 (16 - 12) + 4 =8이므로 1의 자리는 8입니다.
나머지 10의 자리 8에서 5를 빼면 3입니다.
최종적으로 38(56)이 됩니다.
Octal Numbers (8진수)
8진수 = 0, 1, 2, 3, 4, 5, 6, 7
8진수 또한 16진수 system과 매우 유사합니다.
Octal -> Binary (8진수 -> 2진수)
ex) 13 = 1 | 3 = 001 | 011
Binary -> Octal (2진수 -> 8진수)
ex) 110101 = 110 | 101 = 6 | 5
'디지털 회로개론' 카테고리의 다른 글
Lecture 9(Logic simplication & SOP & POS) (0) 2021.10.14 Lecture 8 (Boolean Algebara) (0) 2021.10.13 Lecture 7 (XOR, XNOR, SPP) (0) 2021.10.11 Lecture 5 , 6 (BCD, Gray, Error) code & Logic gate (0) 2021.10.10 Lecture 3(10진수, 2진수, Compliment) (0) 2021.10.05