컴퓨터 내부 데이터 표현

Contents

  • Mathematics

    • Why it matters?
  • Number System

    • 10진법
    • 2진법
    • 8진법
    • 16진법
  • Bits and Bytes
  • 정수의 표현
  • 실수의 표현
  • 문자의 표현
  • Resources

What it matters?

저는 학교 다닐 때 특히 고등학교 입학 후에는 수학 뿐만 아니라 다른 어떤 교과 과목 공부를 하지 않았어요. 음악 공부만 조금 했습니다. 당시에 공부는 안 했지만 수학이라고 하면 딱딱하고 공식을 외워 문제를 풀어내는 과정의 반복처럼 보였습니다.

위와 같은 방식으로 접근을 해서 공부해야 한다면 재미없게 느껴지는거 같아요. 저는 시험을 보는 것도 아니고 대학 타이틀을 위해서도 아니지만 공부를 하려합니다. 그래서 수학이란 무엇인지 정의를 찾아보았지만, 이것부터 쉽지가 않네요. 수학뿐만 아니라 다른 학문도 본질에 대한 정의는 여러 가지가 있는 것 같아요.

몇 가지 알아본 것 중 현재 입장에서 마음에 드는 해석은, 수학이란 세상을 이해하기 위한 학문이다. 정도 입니다. 컴퓨터란 단어에서도 알 수 있듯이 수를 다루기 위해 컴퓨터가 생겼습니다. 개발자로서 현실 세계에 존재하는 어떠한 문제를 해결하고자 한다면, 기존의 수학적 개념을 가져다 사용하면 도움이 될 거라 생각이 듭니다.

Number System

일상에서 사람들은 익숙한 10진법을 사용하지만, 다른 진법의 수 체계가 존재하고 과거 지역과 문명에 따라 10진법이 아닌 다른 진법의 숫자 체계를 사용했던 적도 있습니다. 컴퓨터에서는 전류가 흐르는지 안 흐르는지로 판단을 하기 때문에 2진법을 사용합니다.

10진법

우리가 익숙하게 사용하는 10진법에 대해 먼저 알아 보도록 할게요. 한자어 십진수(十進數)에서 진은 나아갈 진이에요. 한 자리에 사용 가능한 숫자가 0 ~ 9로 그 이후에는 자릿수가 한 자리 올라가야 합니다. 9 다음 숫자는 십의 자리가 1로 바뀌고, 일의 자리는 다시 초깃값 0으로 변경 돼 10이 됩니다. 이러한 십진법에 대한 셜명이 없어도 우리는 익숙해져 있어 자연스럽게 사용할 수 있습니다.

익숙한 10진법의 덧셈 예시입니다. 10진법의 가장 큰 수 9에서 2가 증가하면, 새로운 자릿수를 만들어 1로 변경하고(carry-over) 기존 자리는 0으로 되돌려줍니다.

당연한 듯 하지만 익숙해져 있는 이 규칙을 다른 진법에서도 똑같이 적용하면 큰 어려움 없이 해당 진법을 익힐 수 있습니다.

2진법

2진법은 0과 1 두 개의 숫자로 이루어진 수체계 입니다. 10진법이 열 개이니까 본래 2진법이 더 간단하고 쉬워야 하겠죠. 수학에서는 이진법 표기를 0(2)로 표기를 합니다. 컴퓨터 공학에서는 숫자 앞에 Ob 또는 OB를 붙입니다. (ex, Ob1101010010) 여기서 b는 2진법을 의미하는 binary의 첫 글자입니다.

2진법 표기

  • 수학 : 0(2)
  • 컴퓨터 공학 : Ob1101010010

이진 체계의 수를 차례로 쓰면 아래와 같은 흥미로운 패턴을 볼 수 있습니다.

아래 사진은 이진수 체계에 대한 라이프니츠의 노트 사진입니다.

8진법

앞에서 살펴본 다른 진법과 큰 틀은 같아요. 한 자리에 8덟개의 수를 사용해 표시할 수 있고 가장 작은 수는 0, 가장 큰 수는 7입니다. 8진법은 학습은 하지만 실제 컴퓨터 공학에서 자주 쓰이지는 않습니다.

16진법

16진법은 컴퓨터공학에서 많이 쓰이기 때문에, 2진수와 함께 잘 알아야 해요.

Resources

Number System