본문 바로가기

Computer Science/Computer Architecture

2. 데이터와 2진법(부동소수점에 대하여)

728x90

정보 단위

  • bit : 0과 1을 표현할 수 있는 가장 작은 정보 단위
    • n비트는 2^n 가지 정보를 표현할 수 있다.
  • 1 byte = 8bit
  • 1kB = 1,000byte
  • 1MB = 1,000kB
  • 1GB = 1,000MB
  • 1TB = 1,000GB
  • 1,024 단위로 다음 단위를 나타내는 것은 잘못된  관습. 현재는 이를 KiB, MiB, GiB 등으로 표현한다.
  • word : CPU가 한 번에 처리할 수 있는 데이터 크기
    • x86 CPU는 32비트 워드, x64 CPU는 64비트 워드 CPU이다.
      • x86계열의 CPU가 32비트까지 나왔고 여기서 64비트를 지원하도록 확장된게 x86-64이다. 그래서 x86-64를 줄여 간단히 x64로 표현하게 되었다. x86은 32비트를, x64는 64비트를 가리키게 되었다.

2진법;binary

  • 0과 1로만 숫자를 표기하는 방식

8진법, 16진법

  • (2) 1010101100
  • (8) 1254
  • (16) 2AC

위 처럼 16진법을 사용하면 2진수의 표현이 간결해진다. 변환방법 또한 8진법은 3자리, 16진법은 4자리씩 끊어서 변환하면 편하기 때문에 간편한다

실수의 진법변환

10진 소수점수를 2진 소수점수로 변환하는 방법

0.625 * 2 = 1.25 → 1

0.25 * 2 = 0.5 → 0

0.5 * 2 = 1.0 → 1

⇒ 2진 소수점 표현으로 0.625는 0.101 이 된다. (10진수를 n진법으로 변환할 때는 같은 방법으로 n으로 곱해준 후 정수부의 숫자를 하나씩 순서대로 적으면 된다.)

2진 소수점수를 10진 소수점수로 변환하는 방법

0.101 (₂) → 1 * 2^-1 + 0 * 2^-2 + 1 * 2^-3 = 0.5 + 0.125 = 0.625

음수의 2진 표현

2의 보수법

  1. n의 보수는 더 했을 때 n이 되는 수를 말한다.

0101 (₂) ← 10진수로 5

+1011 (₂) ← 5와 더해서 0이 되는 수는 -5이므로 10진수로 -5가 된다.

=0000 (₂) ← 자리올림이 발생했으나 4bit 크기라서 버려짐, 즉 0이 됨

0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 -8
1001 -7
1010 -6
1011 -5
1100 -4
1101 -3
1110 -2
1111 -1

→ 대부분의 시스템이 2의 보수법으로 부호가 있는 정수를 표현하고 있다.

2의 보수 구하는 간편법 ⇒ 2의 보수 = 1의 보수 + 1

  • 1의 보수법은 0을 1로 1을 0으로 바꾸면 된다.

부동소수점(floating point)

  • 위 설명처럼 2진법으로도 소수점의 표현이 가능하다.
  • 하지만, 위의 방식으로 0.3을 표현하면 0.3 → 0.01001100110011......(0011) 이렇게 무한 반복이 발생한다.
  • 이러한 현상을 방지하기 위해 고정소수점 방식과 부동소수점 방식 2가지가 쓰인다.
  • 고정 소수점
    • 실수 표현에 4byte(32bit)를 사용하고 그 중 부호 1bit, 정수 16bit, 소수 15bit를 사용하도록 약속해 놓은 시스템에 있다고 가정하고 이 규칙으로 7.3을 표현하면 (0)0000000000000111.010011001100110 가 된다.
    • 이 때 정수를 표현하는 비트를 늘리면 큰 수를 표현하는 데 유리해지고 소수점이 부정확해진다.
    • 반대로 소수를 표현하는 비트를 늘리면 큰 수를 나타낼 수 없게 된다.
  • 부동 소수점
    • 고정 소수점의 단점을 보완하기 위해 사용되는 방법이다.
    • 7.3을 (0)0000000000000111.010011001100110….. 2진수로 표현하고
    • 맨 앞의 1바로 뒤에 . 을 찍고 1.11010011001100….. * 2^2 가 된다.
    • 이제 이 것을 32bit로 표현하는 방식은 아래와 같다 
      부동소수점 표현 규칙
  • Sign(부호) : 0은 양수, 1은 음수
  • Exponent(지수) : 8bit로 지수 부분을 나타내게 된다. 이 때 바이어스 표현법을 사용한다. ( 127 + n)
    • 바이어스 표현법 : [0000,0000]이 -127을 나타내고, 1 증가한 [0000,0001]은 -126을 나타내며, 이렇게 반복해 모두 1로 채워진 [1111,1111]은 128을 나타내게 된다. 이렇게 표현하는 이유는 0을 부동소수점 방식 2진수로 표현해보면 알 수 있다.
  • Mantissa(가수) : 소수점 뒤에 오는 수를 나타낸다.

EX)

19.25를 부동소수점 방식으로 표현

1001.01 (₂)

→ 1.001101 * 2^4 → 지수부분이 4이므로 이진법으로 100(2)

→ 지수를 바이어스법으로 바꾸면 127 + 4 = 131이 되어 10000011(2) 가 된다.

→ 0(부호) 10000011(지수) 00110100000000000000000(가수) 이렇게 표현된다.

0을 부동소수점 방식으로 표현

→ 0은 표현할 수 있는 가장 작은 양수 보다 작거나 같아야 할 것이다. 부동 소수점 표현방식에서 가장 작은 수를 나타내는 방법은 지수부분을 -127(바이어스 표현법으로 0000 0000) 으로 나타내는 방법일 것이다

→ 0 00000000 00000000000000000000000 이렇게 표현할 수 있다. 0을 표현하기위에 모든 비트를 0으로 만들어 default value가 모든 bit가 0이 되도록 하기 위함이다. → 다른 표현법들과의 통일성을 유지하기 위함인듯(잘 이해 안됨…)

(내가 이해한 방식)만약 1.0 을 바이어스 표현법으로 사용하지 않으면 지수부분은 0 이므로 0000 0000 으로 표현되고 가수부분도 0000… 이 된다 → 이런 경우 0을 부동소수점으로 표현하기 어렵게 된다. 0은 2진수로 0000 0000 0000.. 이므로 소수점을 찍을 공간도 없고, 지수를 씌울 수도 없는 수이기 때문에 모든 비트가 0 으로 표현되면 0을 나타내도록 바이어스 표현법을 사용하는 게 아닐까?

  • 또한, 지수부에 또 다른 부호비트 없이 음수값을 나타내기 위해 사용하는 이유도 있다. 이렇게 하면 양수 하나를 더 표현할 수 있다는 장점이 있다.

문자를 표현하는 법

  • Character Set : 컴퓨터가 인시하고 표현할 수 있는 문자의 모음
  • 2진수를 문자로 : Character Encoding
  • 문자를 2진수로 : Character Decoding

아스키 코드

  • 8비트로 표현 → 패리티 비트(오류 검출용)를 제외한 7비트로 표현 → 128개가 한계

EUC-KR

  • 완성형 인코딩 방식 : 하나의 전체 글자에 고유한 코드 부여 → 2,350개 정도의 한글만 표현 가능..

UNICODE와 UTF-8

  • 유니코드는 문자집합
  • UTF-XX는 인코딩하는 방법

UTF-8

  • 1~4 byte의 문자 인코딩 결과를 만들어낸다 → 유니코드 문자에 부여된 값의 범위에 따라 각 글자의 byte가 결정된다.

  • 한 - D55C(16) ,글 - AE00(16) → 16진수로 0800(16) ~ FFFF(16)사이에 있음 → 3byte로 인코딩될 것이라는 것을 알 수 있음
728x90

'Computer Science > Computer Architecture' 카테고리의 다른 글

1. 컴퓨터 구조를 공부하는 이유  (0) 2023.11.16