습관처럼

진수변환에 대해서 본문

Algorithms

진수변환에 대해서

dev.wookii 2020. 7. 1. 10:34

숫자의 위치에 따라 가중치가 달라지는 수로 나타내는 방법을 진법이라 하며 그 수를 진수라 한다.

- X진수 : X진수는 한자리 위의 값이 X배가 된다.

- 컴퓨터는 주로 2진법, 8진법, 16진법을 주로 사용한다.

 

  • 1. 10112 (2진법), 5678 (8진법), A116 (16진법) - 우측 아래첨자로 진수를 표시한다.
  • 2. 각 자리의 숫자에 가중치를 곱해서 더하면 10진수가 된다.
  • ㄱ. 10112 = 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 8 + 2 + 1 = 1110
  • ㄴ. 5678 = 5*8^2 + 6*8^1 + 7*8^0 = 320 + 48 + 7 = 37510
  • ㄷ. A116 = 10(=A)*16^1 + 1*16^0 = 160 + 1 = 16110

- 진수변환

  1. X진수의 10진수로의 변환
    • 352.67 = 3*7^2 + 5*7^1 + 2*7^0 + 6*7^-1 (소수점 이하는 -n승이 된다)  = 147 + 35 + 2 + 6/7 = 184.85710
  2. 10진수의 X진수로의 변환
    1. 37.687510를 2진수로 변환
      • 먼저 10진수를 정수부(37)와 소수부(.6875)로 나눈다.
      • 정수부 37은 2로 계속 나누어 나머지의 역순을 나열한다.(2 미만이 될 때까지)
        • 37/2 --- 몫 : 18, 나머지 : 1
        • 18/2 --- 몫 : 9, 나머지 : 0
        • 9/2 --- 몫 : 4, 나머지 : 1
        • 4/2 --- 몫 : 2, 나머지 : 0
        • 2/2 --- 몫 : 1, 나머지 : 0
        • 1/2 --- 몫 : 0, 나머지 : 1    (나머지의 역순을 나열)
        • ================
        • 따라서, 정수부는 100101 이다.
      •  c. 소수부는 2를 곱햇 나온 수의 소수점 윗자리를 구하고 다시 소수점 윗자리를 0으로 만든 뒤 2를 곱한다. 이 과정을 계속 반복한다.(소수점 자릿수까지 반복)
        • 0.6875 * 2 = 1.3750 --- 윗자리 : 1 (1.3750은 소수점 윗자리가 1이므로 0으로 만든 뒤 2를 곱해준다.)
        • 0.3750 * 2 = 0.7500 --- 윗자리 : 0
        • 0.7500 * 2 = 1.5000 --- 윗자리 : 1
        • 0.5000 * 2 = 1.0000 --- 윗자리 : 1    (차례대로 나열)
        • ======================
        • 따라서, 소수부는 0.1011 이다.
        • d. 37.687510 = 100101.10112 이다.
    2. 524.7610을 16진수로 변환
      • 먼저 10진수를 정수부(524)와 소수부(.76)으로 나눈다.
      • 정수부 524를 16으로 나누어 나머지의 역순을 나열한다.
        • 524/16 --- 몫 : 32, 나머지 : C(=12)
        • 32/16 --- 몫 : 2, 나머지 : 0
        • 2/16 --- 몫 : 0, 나머지 : 2
        • =================
        • 따라서, 정수부는 20C 이다.
        • 소수부는 16을 곱해서 나온 수의 소수점 윗자리를 구하고 다시 소수점 윗자리를 0으로 만든 뒤 16을 곱한다. 이 과정을 계속 반복한다.(소수점 자릿수까지 반복)
        • 0.76 * 16 = 12.16 --- 윗자리 : C(=12)
        • 0.16 * 16 = 2.56 --- 윗자리 : 2
        • 0.56 * 16 = 8.96 --- 윗자리 : 8
        • ====================
        • 따라서, 소수부는 C28 이다.
        • d. 524.7610 = 20C.C2816 이다.
  3. 2진수의 2^n진수로의 변환
    1. 2진수를 4진수로 변환
      • 2진수 2비트는 4진수의 한 자리와 대응된다. 소수점을 기준으로 2비트씩 묶어 각 묶음을 4진수로 바꾼다. (2비트씩 묶은 후 남는 비트도 0이 있다고 생각하고 묶어주자)
        • 10110.111012 = 112.3224 이다.

 

  1. ....
    1. 2진수를 8진수로 변환
      • 2진수 3비트는 8진수의 한 자리와 대응된다. 소수점을 기준으로 3비트씩 묶어 각 묶음을 8진수로 바꾼다.
        • 10110.111012 = 26.728 이다.

  1. 4. 2^n진수의 2진수로의 변환
    1. 4진수를 2진수로 변환
      • 4진수는 각 자리를 2비트 2진수로 변환한다.
        • 112.3224 = 10110.111012 이다.

  1. .....
    1. 8진수를 2진수로 변환
      • 8진수는 각 자리를 3비트 2진수로 변환한다.
        • 26.728 = 10110.111012 이다.

  1. .....
    1. 16진수를 2진수로 변환
      • 16진수는 각 자리를 4비트 2진수로 변환한다.
        • A1.616 = 10100001.0112 이다.

5. X진수를 P진수로 변환

- 현재까진 10진수를 제외한 X진수를 P진수로 바로 변환하는 방법은 알려져있지 않다.

- X진수를 10진수로 변환 후 P진수로 변환해야 한다.

  1. ㄱ. 2진수를 7진수로 변환
    • 2진수 1011101을 10진수로 변환한다.
      • 10111012 = 1*2^6 + 0*2^5 + 1*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0 = 64 + 16 + 8 + 4 + 1 = 9410
    • 10진수 93을 7진수로 변환한다.
      • 93/7 --- 몫 : 13, 나머지 : 2
      • 13/7 --- 몫 : 1, 나머지 : 6
      • 1/7 --- 몫 : 0, 나머지 : 1
      • =================
      • 따라서, 1627
      • 10111012 = 1627 이다.

출처: https://freezboi.tistory.com/31 [코딩 공작소]