ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Lecture 4 : 진수 변환 및 계산
    디지털 회로개론 2021. 10. 6. 02:02
    728x90

    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입니다.

     

    부동소수점 

     

    실수형 (부동 소수점)

    실수형 float를 공부하다 부동소수점 개념이 나와서 한번 이해하는대로 정리해 보려합니다. 먼저 예를 들어 실수 263.3을 2진수로 나타내 보면 정수 부분 263 = 100000111 실수 부분 0.3 = 0.01(0011)(0011)(001

    riveroilstone.tistory.com

    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

Designed by Tistory.