본문 바로가기
컴퓨터 공학/논리회로

[논리 회로] 2장. 수의 체계

by kim-dev 2024. 6. 7.
반응형

본 내용은 2024년 1학기 '컴퓨터논리개론' 수업을 들으며 노션에다가 정리한 글을 옮겨온 포스트입니다.
제 공부를 위해 작성한 거라서 제가 알아보기 편하게  정리했습니다. 여러분들도 자유자재로 열람 가능하지만 간혹 이해하기 힘든 부분이 있을 수도 있다는 점 양해 부탁드립니다!


1. 진수

10진수

우리는 일반적으로 0부터 9까지의 10개의 기호로 표현하는 10진수를 사용한다. → 일의자리부터 0부터 1씩 증가하는 10의 양의 거듭제곱을 곱한 형태!

이렇게, 진법을 나타내는 기본수를 기수라고 한다.

10이 기수라면 10진법, 2가 기수라면 2진법, 12가 기수라면 12진법…

2진수

2진법은 사실 매우 오래 전에 만들어졌음. 중국의 예김 이라는 책을 소개하며 기원전 25년에 2진법을 다뤘고, 17세기 독일의 철학자 라이프니츠가 2진법 제안하기도 함.

2진수는 현재 컴퓨터공학(전자공학)에서 주로 사용한다.

  • 초기 컴퓨터의 펀치 카드나 종이 테이프의 구멍의 유무에 따라 0과 1을 표현
  • 메모리로 사용된 자기 코어에 전선을 통과하여 자화하는 방향에 따라 0과 1을 표현
  • 최근 다이오드와 트랜지스터 같은 반도체가 발명되면서, 전류의 유무에 따라 0과 1을 표현!

→ 데이터나 신호의 유무를 판단하기 가장 적합한 진법.

2진수는 8진법이나 16진법으로 쉽게 바꿀 수 있다.

 

8진수와 16진수

2진수를 3자리씩 끊으면 8진수, 4자리씩 끊으면 16진수로 표현할 수 있다. 실제로는 8진수보다는 16진수를 더 많이 씀! (더 간결하게 나타낼 수 있어서)

소수점은 나머지 공간 0으로 채워야 함!!!

 
 

2. 진법 변환

컴퓨터에서 다루는 2진수는 크게 두 가지가 있다.

  • 고정소수점 수 → 정수 소수점을 표현하지 않는 수로, 양의 정수, 0, 음의 정수로 표현.
  • 부동소수점 수 → 실수 소수점이 떠다니면서 움직인다는 뜻으로, 점의 위치가 수의 크기에 따라 이동.

10진법에서 다른 진법으로 바꾸는 건 간단하다. 바꾸려는 진법의 기수를 나누거나 곱해서 계산함!

75.6을 2진수로 바꾸면??

즉 대부분의 10진 소수 부분은 2진수로 정확하게 표현할 수 없음…

10진수에서 8진수나 16진수로 변환하는 것에도 동일하게 적용된다.

2진수-8진수-10진수-16진수 상호변환

  • 10진수 → 2진수/8진수/16진수 방금 위에서 나옴!
  • 2진수 → 8진수/16진수 각각 3자리, 4자리씩 끊어서 보면 됨.
  • 2진수/8진수/16진수 → 10진수 각 자리에 기수의 거듭제곱을 곱해서 구하면 됨.

3. 2진수 정수 연산과 보수

컴퓨터의 모든 데이터는 2진수로 저장되고 계산되기 때문에, 일단 2진수의 표현 방법 3가지를 먼저 알아보자!!

1) 2진수 양의 정수 덧셈

그냥 더하면 됨!! 두 수를 더해서 2 이상이 되면 자리 올림이 발생해서 윗 자리에 더한다.

이거를 “캐리”가 발생했다고 함!!

2) 2진수 음의 정수 표현과 보수

음수를 나타내려면 부호를 표시해야 하는데, 디지털 컴퓨터는 이 부호도 0 또는 1로 나타낸다. → 이렇게 부호를 나타내는 비트를 부호비트라고 하고, 가장 왼쪽의 MSB에 나타낸다.

2진 음수를 나타내는 방법으로는 3가지가 있다.

  • 부호와 절대치: 부호만 음, 양으로 나타내고 뒷자리는 절댓값 크기를 사용.
  • 1의 보수: 각 자릿수의 값을 0을 1로, 1을 0으로 바꾼 것.
  • 2의 보수: 1의 보수에서 1을 더한 것.

부호비트의 존재로 인해, 8비트 크기라면 절댓값을 최대 27까지 표현 가능!!

이건 2진수의 경우 1의 보수와 2의 보수를 만드는 방법이었다. r진수의 경우에는 r-1의 보수와 r의 보수를 만들 수 있음!!

 
 

보수를 알아야 하는 이유는, 음수를 표현해서 뺄셈을 하기 위해서다!! 실제로 컴퓨터 하드웨어에는 뺄셈 회로가 없고 덧셈 회로만 있기 때문에, 보수를 취해서 더하는 방식으로 뺄셈을 구현한다!

중요한 건, 보수를 사용할 땐 비트 수(자릿수)가 반드시 같아야 한다는 것!!

3) 부호 확장

길이가 다른 두 개의 피연산자를 연산할 때, 길이가 긴 피연산자의 크기에 맞게 확장해서 계산하는데, 늘어난 비트 수만큼 부호를 늘려주는 것.

4) 2의 보수로 표현된 음수를 10진수로 전환

 

5) 2의 보수 연산

10진수 연산과 방법은 같음. 그런데 이건 작은 수에서 큰 수를 뺄 수 있다!

8비트 연산의 예시

이걸 보면, 캐리의 MSB+1과 MSB가 같아야 정상적으로 계산되고, 다르면 오버플로우가 뜬 것!!

4. 2진 부동소수점 수의 표현

컴퓨터에서는 과학적인 표기 방식을 통해 부동 소수점 수를 표현한다.

예를 들어 10진수 123.456은 1.23456∗102로, 16진수 123.ABC는 1.23𝐴𝐵𝐶∗162 나타낸다! → 소수점을 맨 앞으로 당기는 것!!! (정규화)

IEEE 754 표준 표기 방식

  • 부호 영역: 전체 수가 양수인지 음수인지 표시
  • 지수 영역: 2진수의 경우라면 2의 지수
  • 가수 영역: 소수 이하 부분

참고로 단정도는 32비트의 단일 정밀도, 배정도는 64비트의 2배 정밀도! → 배정도로 하면 더 정확해짐.

정규화

  • 10진수 5의 정규화된 표현 방법: 5.0∗100
  • 10진수 75.6875의 정규화된 표현 방법: 7.56875∗101