Home 컴퓨터 구조 (3)
Post
Cancel

컴퓨터 구조 (3)

해당 포스팅은 컴퓨터 사이언스 부트캠프 with 파이썬(양태환 저)를 보고 공부하며 개인적인 용도를 위해 정리한 글이다.

실수를 표현하는 방법

고정소수점 표현법

  • 2진 소수점의 위치를 임의로 정하는 방법
  • 4비트가 있다고했을 때 2비트는 소수점의 오른쪽에 있는 분수를 표현하고 2비트는 왼쪽에 있는 숫자들을 표현하는데 쓸 수 있다.
    • 2비트 = 분수, 2비트 = 정수 표시
    • 정수를 나타내는 비트는 동일하며 분수를 나타내는 비트는 2의 음의 거듭제곱처럼 나타낸다 \(2^1 + 2^0 \, . 2^{-1} + 2^{-2}\)
  • 해당 방법은 실수값을 표현하기 위해 필요한 비트가 너무 많기 때문에 범용 컴퓨터에서 사용하는 경우는 드물지만, 디지털 신호 처리 장치 (DSP; Digital Signal Processor) 에선 종종 사용.

부동소수점 표현법

  • 넓은 범위의 실수를 2진수로 표현하기 위해 과학적 표기법을 적용.
  • 수를 해석하는 새로운 방법을 도입해서 큰 범위의 수를 표현.
    • 가수mantissa 와 지수exponent 를 통해 표현. \(1.2 * 10^{-3} \; (1.2가 \, 가수,\, 10^{-3}가 \, 지수)\)
  • 2진수의 지수의 밑은 항상 2로 고정.
\[2^0.2^{-1}\,* (2^{...2+1+0})\]
  • 해당 방법은 0을 표현하는 방법이 4가지나 되는 0 표기 중복이 발생하여 비트 낭비가 심하며 모든 수를 표현할 수 없다는 문제를 갖고 있다.

IEEE 부동소수점 수 표준

  • 가수와 지수에 대해 각각 부호 비트를 사용.
  • 지수에 대한 부호 비트는 지수의 비트 패턴에 감춰져 있음.
  • 낭비 되는 비트 조합을 최소화하고 반올림을 쉽게하기 위해 여러 가지 트릭을 사용.
    • 정규화normalization ; 가수를 조정해서 맨 앞에 0 이 없게 만드는 것. (이를 위해서 지수도 조정해야함.)
    • DEC 에서 고안한 가수의 맨 왼쪽 비트가 1 이란 사실을 알고 있으므로 이를 생략하는 방법.
  • 기본정밀도single precision 은 32비트를 사용하며 7비트 정밀도로 $10^{38}$ 의 범위를 표현 가능.
    • 31 번째 (제일 왼쪽) 비트 : S (가수에 대한 부호)
    • 30 ~ 23 비트 : 지수
    • 22 ~ 0 (제일 오른쪽) 비트 : 가수
  • 2배 정밀도double precision 은 64비트를 사용하며 15비트 정밀도로 $10^{308}$ 의 범위를 표현 가능.
    • 63 번째 (제일 왼쪽) 비트 : S (가수에 대한 부호)
    • 62 ~ 52 비트 : 지수
    • 51 ~ 32 (상위 20) 비트 : 가수
    • 31 ~ 0 (하위 32) 비트 : 가수

2진수를 표현하는 다양한 방법

BCD

  • 10진수를 표현할 때 4비트를 사용.
  • 12 라는 수를 표현할 때 2진수는 $1100$ 이지만 BCD 로는 $0001$ $0010$ 으로 표현.
    • 앞의 4비트는 십의 자리를 뒤의 4비트는 일의 자리를 표현
  • 디스플레이나 가속도 센서등이 BCD 를 사용하지만 낭비 되는 비트가 너무 많아 현대에는 잘 쓰이지 않음.

8진 표현법

  • 밑base number 가 8 ($2^3$) 인 진법.
  • 2진수 비트들을 3그룹으로 묶어서 표현한다.
    • e.g. $10010111000101100$ 을 표현할 때 3그룹 씩 묶어서 $100$ $101$ $110$ $001$ $010$ $100$ 으로 나눈 후 각자의 수를 계산하여 (4 5 6 1 2 4) 이어 붙인다. → $456124$
  • 아직도 쓰이긴하지만 과거처럼 널리 쓰이진 않음.

16진 표현법

  • 밑base number 가 16 ($2^4$) 인 진법.
  • 2진수 비트들을 4그룹으로 표현한다.
  • 최근 컴퓨터 내부가 8비트의 배수를 사용해 만들기 때문.
  • 8의 배수는 4 로는 균일하게 나눠지지만 3 으로는 균일하게 나눠지지 않는다.
  • 16 진수는 0 ~ 9 와 $abcdef$ 까지 사용.
    • e.g. $11010011111111000001$ 을 표현할 때 4그룹씩 묶어서 $1101$ $0011$ $1111$ $1100$ $0001$ 으로 나눈 후 각자의 수를 계산한다.
    • $1111$ 은 16 이 되는데 16진수에서 16은 $f$ 로 표현한다.

프로그래밍 언어의 진법 표기법

  • 0b 로 시작하는 숫자는 2진 숫자이다.
  • 0 으로 시작하는 숫자는 8진 숫자이다. (e.g. 017 은 8진수이며 10진수로는 15이다.)
  • 1 ~ 9 로 시작하는 숫자는 10진 숫자이다. (e.g. 123 은 10진수이다.)
  • 0x 가 앞에 붙은 숫자는 16진수이다. (e.g. 0x12f 는 16진수이며 10진수로는 303이다.)
This post is licensed under CC BY 4.0 by the author.

컴퓨터 구조 (2)

숫자와 문자가 혼합 된 문자열에서 숫자만 찾기