Publish:

νƒœκ·Έ:

μΉ΄ν…Œκ³ λ¦¬:

βœ”οΈ μ»΄ν“¨ν„°μ˜ 데이터 μ €μž₯ 방식

μ €μž₯방식 μ €μž₯방식

  • 전기적/λ§ˆκ·Έλ„€ν‹± μ‹ ν˜Έλ‘œ 의미λ₯Ό 전달할 수 μžˆλŠ” κ°€μž₯ κ°„λ‹¨ν•œ 방식이 ON/OFF 방식이닀.
  • 이λ₯Ό ν‘œν˜„ν•˜κΈ° κ°€μž₯ μ μ ˆν•œ 방식이 2진법이닀.
  • ν•˜λ‚˜μ˜ λΉ„νŠΈλŠ” 0μ΄λ‚˜ 1의 값을 κ°€μ§ˆ 수 있고, 각각은 μ°Έ, 거짓 ν˜Ήμ€ μ„œλ‘œ 배타적인 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚Έλ‹€.
  • λ”°λΌμ„œ 값을 λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜λ €λ©΄ 데이터λ₯Ό 2μ§„μˆ˜λ‘œ ν‘œν˜„ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.
    • λ¬Έμžκ°™μ€ 경우 charset 에 μ˜ν•΄ λ³€ν™˜λœλ‹€.
  • 적은 λ©”λͺ¨λ¦¬λ‘œ 더 λ§Žμ€ μƒνƒœλ₯Ό 관리할 수 μžˆλ‹€. (1bit λ‹Ή 두 κ°€μ§€μ˜ μƒνƒœλ₯Ό ν‘œν˜„ν•  수 μžˆλ‹€.)
  • λ©”λͺ¨λ¦¬ κΈ°λ³Έ λ‹¨μœ„ : 8bit == 1byte

    μ˜ˆμ‹œλ‘œ λ“€μžλ©΄, 인간은 손가락이 λͺ‡ 개 νŽ΄μ ΈμžˆλŠ”μ§€, ν˜Ήμ€ μ ‘ν˜€μžˆλŠ”μ§€λ₯Ό μ„Όλ‹€λ©΄, κΈ°κ³„λŠ” 손가락에 νŠΉμ • μˆœμ„œλ₯Ό ν• λ‹Ήν•˜μ—¬ λͺ‡ 번째 손가락이 νŽ΄μ§€κ³  μ ‘ν˜”λŠ”μ§€λ₯Ό νŒŒμ•…ν•˜μ—¬ 그것을 숫자둜 μΈμ‹ν•˜λŠ” 식이닀. ν•΄λ‹Ή 뢀뢄은 λΉ„νŠΈ μ—°μ‚°μ˜ μ‘μš© λΆ€λΆ„μ—μ„œ μ’€ 더 μžμ„Ένžˆ 닀뀄보겠닀.

βœ”οΈ λΉ„νŠΈ 크기와 μ €μž₯ν•  수 μžˆλŠ” κ°’μ˜ λ²”μœ„

8bit (255)

  • 00000000 ~ 11111111 (-128 ~ +127)
  • 맨 μ•žμ— 0 을 뢙인닀.

16bit (65535)

  • \(-2^{15}\) ~ \(2^{15}\) (-32,768 ~ 32,767)
  • 맨 μ•žμ— 0x λ₯Ό 뢙인닀.

32bit (μ•½ 42μ–΅)

  • μ•½ -21μ–΅ ~ + 21μ–΅

πŸ’‘ 예λ₯Ό λ“€μ–΄ 22μ–΅ μ΄λΌλŠ” 돈의 μ•‘μˆ˜λ₯Ό μ €μž₯ν•˜λ €κ³  ν•˜λ©΄, μ΅œμ†Œ 64bit(8byte) λ©”λͺ¨λ¦¬κ°€ ν•„μš”ν•˜λ‹€.

bit λ‹¨μœ„
8bit(1byte) byte
16bit(2byte) short
32bit(4byte) int
64bit(8byte) long

βœ”οΈ μ •μˆ˜λ₯Ό 2μ§„μˆ˜λ‘œ ν‘œν˜„ν•˜λŠ” 방법

λΆ€ν˜Έ-크기/μ ˆλŒ€κ°’(Sign-Magnitude)

  • 뢀동 μ†Œμˆ˜μ μ—μ„œ κ°€μˆ˜λΆ€(significand or mantissa)λ₯Ό μ €μž₯ν•  λ•Œ μ‚¬μš©ν•œλ‹€.
  • 맨 μ™Όμͺ½ 1λΉ„νŠΈλ₯Ό λΆ€ν˜Έ λΉ„νŠΈλ‘œ μ‚¬μš©ν•œλ‹€. μ–‘μˆ˜λŠ” 0, μŒμˆ˜λŠ” 1 이닀.
  • λ‚˜λ¨Έμ§€ λΉ„νŠΈλŠ” μ ˆλŒ€κ°’(magnitude)으둜 μ €μž₯ν•œλ‹€.
    • 8λΉ„νŠΈ = 1λΉ„νŠΈ(λΆ€ν˜Έ) + 7λΉ„νŠΈ(μ ˆλŒ€κ°’, 크기)
         ex) +24 => |+24| = 24 ---> 0001 1000
         ex) -24 => |-24| = 24 ---> 1001 1000
      
  • 수의 λ²”μœ„(8λΉ„νŠΈ κΈ°μ€€): -127 ~ + 127
     0111 1111 (127)
     0111 1110 (126)
     0111 1101 (125)
        ...
     0000 0001 (1)
     0000 0000 (+0)   
     1000 0000 (-0) 
     1000 0001 (-1)
        ...
     1111 1101 (-125)
     1111 1110 (-126)
     1111 1111 (-127)
    
  • 단점
    • 두 개의 0(+0, -0)이 μ‘΄μž¬ν•œλ‹€.
    • μ–‘μˆ˜μ™€ 음수λ₯Ό λ”ν–ˆμ„ λ•Œ μ˜³μ§€ μ•Šμ€ 값이 λ‚˜μ˜¨λ‹€.
       ex) 4λΉ„νŠΈμΌ 경우, 1 + -1 = ?
           0001(+1) + 1001(-1) = 1010 (-2) <-- 계산 κ²°κ³Όκ°€ μ˜³μ§€ μ•Šλ‹€.
    
    • λΉΌκΈ°λ₯Ό μ²˜λ¦¬ν•˜λŠ” μ»΄ν“¨νŒ… 회둜λ₯Ό λ³„λ„λ‘œ 섀계해야 ν•˜λ―€λ‘œ ν•˜λ“œμ›¨μ–΄κ°€ λ³΅μž‘ν•΄μ§„λ‹€.
  • μž₯점
    • μ΄ν•΄ν•˜κΈ° 쉽닀!

1의 보수(Signed 1’s Complement)

  • Sign-Magnitude λ°©μ‹μ—μ„œλŠ” λΆ€ν˜Έ(+,-)ν‘œμ‹œλ₯Ό 맨 μ•žμ˜ 1λΉ„νŠΈλ₯Ό μ΄μš©ν•΄μ„œ ν‘œμ‹œν–ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이런 λ°©μ‹μœΌλ‘œλŠ” μ œλŒ€λ‘œ 된 연산이 νž˜λ“€μ—ˆκ³ , κ²°κ΅­ μƒˆλ‘œμš΄ λΆ€ν˜Έ ν‘œμ‹œ 방법을 μ°Ύκ²Œλœλ‹€.
  • κ°€μ‚°κΈ°(adder)λ₯Ό μ‚¬μš©ν•˜λŠ” 컴퓨터가 음의 μ •μˆ˜λ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•΄μ„  μ•„λž˜μ™€ 같은 아이디어가 ν•„μš”ν•˜λ‹€.
    • 1
      
        A-B = A+(-B)
      

      예λ₯Όλ“€μ–΄ μ£ΌνŒμ„ μ΄μš©ν•œ λ§μ…ˆ, λΊ„μ…ˆ μ‹œμ— 5, 10의 보수λ₯Ό μ‚¬μš©ν•œλ‹€. 보수 보수 생각 해보면 ν‰μ†Œ 10μ§„μˆ˜ λΊ„μ…ˆμ„ ν• λ•Œ 보수λ₯Ό μ΄μš©ν•΄ λΊ„μ…ˆμ„ ν•˜κ³  μžˆλ‹€. 14-6 을 계산할 λ•Œ 4+4 둜 계산 ν•˜λŠ” 것과 κ°™λ‹€.

  • ex) 14-6 
        => 10+4-6 => -6을 ν•˜λŠ”κ²ƒμ΄ μ•„λ‹ˆλΌ, 6에 λŒ€ν•œ 10의 보수인 4λ₯Ό λ”ν•œλ‹€. 
        => 4+4
    
  • μ œν•œλœ 자릿수의 μ •μˆ˜λ§Œμ„ μ‚¬μš©ν•  λ•ŒλŠ” 음수λ₯Ό ν‘œν˜„ν•  λ•Œ 음의 λΆ€ν˜Έ ν‘œν˜„μ„ μ‚¬μš©ν•˜λŠ” λŒ€μ‹  보수λ₯Ό μ΄μš©ν•œ ν‘œν˜„μ„ μ‚¬μš©ν•  수 μžˆλ‹€.

1의 보수둜 λ°”κΎΈλŠ” 방법(XORμ—°μ‚°)

  • λͺ¨λ“  λΉ„νŠΈλ₯Ό λ°˜λŒ€λ‘œ λ’€μ§‘λŠ”λ‹€.
    8bit κΈ°μ€€
    ex) +24 => 0001 1000
    ex) -24 => 1110 0111
  • 수의 λ²”μœ„(8λΉ„νŠΈ κΈ°μ€€): -127 ~ +127
     0111 1111 (127)
     0111 1110 (126)
     0111 1101 (125)
        ...
     0000 0001 (1)
     0000 0000 (+0)
     1111 1111 (-0)
     1111 1110 (-1)
        ...
     1000 0010 (-125)
     1000 0001 (-126)
     1000 0000 (-127)

μ—°μ‚°

1의 보수 μ—°μ‚°

  • μ—¬μ „νžˆ 두 개의 0(+0, -0)이 μ‘΄μž¬ν•œλ‹€.
  • 두 수λ₯Ό λ”ν•œ ν›„ λΉ„νŠΈ 크기λ₯Ό μ΄ˆκ³Όν•œ 1 κ°’(carry)을 λ‹€μ‹œ 맨 뒀에 λ”ν•΄μ•Όλ§Œ μ˜³μ€ 값이 λœλ‹€.

✍️ 보수(θ£œζ•Έ) λž€ 보수(θ£œζ•Έ)λŠ” 보좩을 ν•΄μ£ΌλŠ” 수λ₯Ό μ˜λ―Έν•œλ‹€. 이λ₯Όν…Œλ©΄ 1에 λŒ€ν•œ 10의 λ³΄μˆ˜λŠ” 9, 4에 λŒ€ν•œ 15의 λ³΄μˆ˜λŠ” 11의 κ°œλ…μ΄λ‹€. 1에 λŒ€ν•œ 2의 λ³΄μˆ˜λŠ” 1이닀.

2의 보수(Signed 2’s Complement)

  • 1μ˜λ³΄μˆ˜μ— 1을 λ”ν•œ κ°’.
  • μžλ°”μ—μ„œ 음수λ₯Ό μ €μž₯ν•˜λŠ” 방법.
  • 1의 보수의 λ¬Έμ œμ μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ“±μž₯ν•œ 방법. (계산 ν›„ 1을 λ”ν•˜λŠ” 것이 μ•„λ‹Œ, 미리 1을 더해놓고 계산)
  • 음수 0을 μ—†μ•°μœΌλ‘œμ¨ -128κΉŒμ§€ ν‘œν˜„ν•  수 μžˆλ‹€.

2의 보수둜 λ°”κΎΈλŠ” 방법

case 1) λͺ¨λ“  λΉ„νŠΈλ₯Ό λ°˜λŒ€ κ°’(1의 보수)으둜 λ§Œλ“  λ‹€μŒ 1을 λ”ν•œλ‹€.

   ex) 0010 1001(+41)
       1101 0110(1의 보수)
     +         1
      -----------
       1101 0111(-41)

case 2) 였λ₯Έμͺ½μ—μ„œλΆ€ν„° 1을 μ°ΎλŠ”λ‹€.

  • 찾은 1의 μ™Όμͺ½νŽΈμ— μžˆλŠ” λͺ¨λ“  λΉ„νŠΈλ₯Ό λ°˜λŒ€ κ°’μœΌλ‘œ λ°”κΎΌλ‹€.
    ex) 0010 1001(41) => 1101 0111(-41)
                ^                ^
    ex) 0010 1100(44) => 1101 0100(-44)
                ^                ^
  • 수의 λ²”μœ„(8λΉ„νŠΈ κΈ°μ€€): -128 ~ +127
     0111 1111 (127)
     0111 1110 (126)
     0111 1101 (125)
        ...
     0000 0010 (2)
     0000 0001 (1)
     0000 0000 (+0)
     1111 1111 (-1)
     1111 1110 (-2)
        ...
     1000 0011 (-125)
     1000 0010 (-126)
     1000 0001 (-127)
     1000 0000 (-128)

μ—°μ‚°

  ex) 10 - 7 = 10 + (-7) = 3
      10      => 0000 1010
      7       => 0000 0111
      -7      => 1111 1000 + 1 = 1111 1001

      0000 1010 (10)
    + 1111 1001 (-7)
    -----------------
    1 0000 0011 (3)  => 8λΉ„νŠΈλ₯Ό λ„˜μ–΄κ°€λŠ” 값은 버린닀.
  • μž₯점
    • μ–‘μˆ˜μ™€ 음수의 λ§μ…ˆμ΄ κ°€λŠ₯ν•˜λ‹€. –> λ§μ…ˆμœΌλ‘œ λΉΌκΈ°λ₯Ό μˆ˜ν–‰ν•  수 μžˆλ‹€.
    • 음수 0이 μ—†λ‹€. 0에 λŒ€ν•œ ν‘œν˜„μ΄ ν•œ 가지이닀.

K-초과 (Excess-K)

  • 뢀동 μ†Œμˆ˜μ μ˜ μ§€μˆ˜λΆ€(exponent)λ₯Ό μ €μž₯ν•  λ•Œ μ‚¬μš©ν•œλ‹€.
  • μ˜€ν”„μ…‹ λ°”μ΄λ„ˆλ¦¬(offset binary) λ˜λŠ” λ°”μ΄μ–΄μŠ€λœ ν‘œκΈ°λ²•(biased representation) 이라고도 ν•œλ‹€.
  • Kλ₯Ό λ°”μ΄μ–΄μŠ€ 값이라 λΆ€λ₯΄λ©°, ν‘œν˜„ν•˜λ €λŠ” 값에 더할 λ•Œ μ‚¬μš©ν•œλ‹€.
    ν‘œν˜„ν•˜λ €λŠ” κ°’ + 초과 κ°’(K) = κ²°κ³Ό
  • λ°”μ΄μ–΄μŠ€ κ°’(K)을 κ΅¬ν•˜λŠ” 곡식: K = \(2^{λΉ„νŠΈμˆ˜ - 1}\)

    ex) 8λΉ„νŠΈμΌ 경우 β€”> K = \(2^{8 - 1}\) = \(2^7\) = 128,

        κ²°κ³Ό = 128 + κ°’
    
      1111 1111 = 128 + 127
      1111 1110 = 128 + 126
      1111 1101 = 128 + 125
      ...
      1000 0001 = 128 + 1
      1000 0000 = 128 + 0
      0111 1111 = 128 + (-1)
      ...
      0000 0010 = 128 + (-126)
      0000 0001 = 128 + (-127)
      0000 0000 = 128 + (-128)
    

IEEE-754 λΆ€λ™μ†Œμˆ˜μ  ν‘œμ€€

  • K = \(2^{λΉ„νŠΈμˆ˜ - 1}\) - 1

    ex) 8λΉ„νŠΈμΌ 경우 β€”> K = \(2^7\) - 1 = 127,

      κ²°κ³Ό = 127 + κ°’

    1111 1111 = 127 + 128
    1111 1110 = 127 + 127
    1111 1101 = 127 + 126
    1111 1100 = 127 + 125
    ...
    1000 0000 = 127 + 1
    0111 1111 = 127 + 0
    0111 1110 = 127 + (-1)
    ...
    0000 0010 = 127 + (-125)
    0000 0001 = 127 + (-126)
    0000 0000 = 127 + (-127)

λ°”μ΄μ–΄μŠ€ 방식(Excess-K, IEEE-754)으둜 데이터λ₯Ό μ €μž₯ν•  λ•Œμ˜ 이점?

  • λͺ¨λ“  λΉ„νŠΈκ°€ 0일 λ•Œ μ΅œμ†Œ 값을 가지고, λͺ¨λ“  λΉ„νŠΈκ°€ 1일 λ•Œ μ΅œλŒ€ 값을 κ°–λŠ”λ‹€.
  • 이런 이유둜 μž‘μ€ κ°’μ—μ„œ 큰 κ°’μœΌλ‘œ μ •λ ¬λ˜λŠ” κ²°κ³Όλ₯Ό λ‚³λŠ”λ‹€.
  • λͺ¨λ“  λΉ„νŠΈκ°€ μ •λ ¬λœ μƒνƒœμ΄κΈ° λ•Œλ¬Έμ— λΆ€λ™μ†Œμˆ˜μ μ΄λ“  μ •μˆ˜μ΄λ“  상관없이 값을 비ꡐ할 λ•Œ 속도가 λΉ λ₯΄λ‹€.
  • λΆ€ν˜Έ-크기, 1의 보수, 2의 λ³΄μˆ˜μ™€ 같은 λ°©λ²•μœΌλ‘œ 값을 ν‘œν˜„ν•  경우, λΉ„νŠΈλ“€μ΄ 순차적으둜 μ •λ ¬λ˜μ§€ μ•ŠλŠ”λ‹€.

정리

컴퓨터가 μ •μˆ˜ν˜• 데이터λ₯Ό μ–΄λ–€μ‹μœΌλ‘œ μ €μž₯ν•˜λŠ”μ§€μ— λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜μŠ΅λ‹ˆλ‹€. λ‹€μŒ ν¬μŠ€νŠΈμ—μ„œλŠ” μ‹€μˆ˜(λΆ€λ™μ†Œμˆ˜μ )λ₯Ό μ €μž₯ν•˜λŠ” 방식에 λŒ€ν•΄ μ•Œμ•„λ΄…λ‹ˆλ‹€.

reference

λ°©λ¬Έν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€! λŒ“κΈ€,지적,ν”Όλ“œλ°± μ–Έμ œλ‚˜ ν™˜μ˜ν•©λ‹ˆλ‹€πŸ˜Š

λŒ“κΈ€λ‚¨κΈ°κΈ°