[CS50] Chapter 1: 컴퓨터와 컴퓨팅 - Topic 4~6

Ha Young Do·2021년 8월 5일
0

Topic 4. 컴퓨터가 숫자를 어떻게 셀까요?

컴퓨터가 이해하는 인풋과 아웃풋

  • 0과 1로 이루어진 컴퓨터 언어
  • 10진법 (decimal system) vs 2진법 (binary system)
    123이라는 숫자를 보았을 때 인간은 각각의 자리를 100의 자리, 10의 자리, 1의 자리로 해석하여 123이라는 숫자를 본다.
    100 * 1 + 10 * 2 + 1 * 3 = 123
    반면에 111이라는 숫자를 보았을 때 컴퓨터는 각각의 자리를 4의 자리, 2의 자리, 1의 자리로 해석하여 10진법의 7이라는 숫자를 본다
    4 * 1 + 2 * 1 + 1 * 1 = 7
  • 인간과 컴퓨터가 서로 숫자를 읽는 방식은 같지만 컴퓨터의 알파벳이 더 작다

생각해보기

  1. 4개의 binary bulb가 있다면 0,6,11은 어떻게 표현할 수 있을까요?
  • 0: 0000 (모두 꺼짐)
    6: 0110 (중간 두개만 켜짐)
    11: 1011 (두번째를 제외하고 모두 켜짐)
  1. 2진법과 10진법만이 숫자를 표현할 수 있는 유일한 방법일까요? 3진법이 있다면 어떤 모습일까요? 3진법으로 50을 표현할 수 있나요? 그리고 8진법, 16진법에서는 어떠한가요?
  • 3진법의 경우 0, 1, 2로 모든 숫자를 표현한다.
    첫번째 자리는 1의 자리, 두번째 자리는 3의 자리, 세번째 자리는 3의 제곱 (9)의 자리, 네번째 자리는 3의 세제곱 (27)의 자리, ... 와 같은 형식이 된다.
    50을 표현하려면 27 1 + 9 2 + 3 1 + 1 2, 즉 1212로 표현된다.
    8진법, 16진법도 마찬가지로 각각 1~7, 1~15로 각각의 자리를 표현하며 한 자리가 커질수록 거듭제곱의 형태로 나아간다.

Topic 5. 컴퓨터는 문자를 어떻게 표현할까요?

ASCII 코드

  • 0과 1로만 데이터를 저장할 수 있는 컴퓨터의 특성상, 문자 또한 표현하려면 0과 1로 표현해야 한다
    예: 인간 언어 HI -> ASCII 코드에서 72, 73 (각각 2진수로 표현)
  • 소문자의 경우, 대문자보다 항상 2^5만큼 크기 때문에 2^5 자리의 숫자만 바꿔주면 된다
    대문자 A는 65, 2진수로 100001
    소문자 a는 97, 2진수로 1100001
  • 기본적인 ASCII 코드 차트에서는 7비트만 사용하여 최대 128가지 문자를 표현할 수 있고,
    확장 ASCII 코드 차트에서는 8비트를 사용하여 $ 혹은 %과 같은 기호까지 포함하여 최대 256가지 문자를 표현할 수 있다.

Unicode

  • 확장 ASCII 코드에 포함되지 않는 기호나, 영어 외의 다른 문자의 경우 표준 ASCII 표에 포함시키기 어려움이 있어 100만개 이상의 문자들을 표현할 수 있는 Unicode를 사용한다
  • 첫 128자는 ASCII 코드와 동일하여 호환 가능

생각해보기

  1. 우리는 왜 ASCII 코드가 필요할까요? ASCII 코드가 없다면 어떤 문제가 생길까요?
  • 컴퓨터는 숫자, 특히 이진수만 이해할 수 있기에 문자를 표현하기가 어려워진다.
  1. ASCII 코드를 이용해서 여러분들의 이름을 이진수나 십진수로 적을 수 있나요?
  • 72 97 32 89 111 117 110 103
    1001000 1000001 100000 1011001 1101111 1110101 1101110 1100111
    (Ha Young)

Topic 6. 2진수로 표현하기엔 너무 길어요. 좋은 방법이 없을까요?

Hexadecimal이란?

  • 컴퓨터 과학에서는 10진수나 2진수 이외에도 16진수를 사용해 표현하는 경우가 많다.
  • 0에서 9까지는 10진수와 동일하게 표현하고, 10부터 15까지는 a부터 f까지 알파벳로 표현한다.
  • 대부분의 문자를 표현할 때 8비트, 즉 8자리의 2진수로 표현이 될 수 있는데, 이것을 둘로 쪼개 16진수로 변환하면 2자리의 16진수로 표현이 가능하다. 따라서 훨씬 압축적으로 데이터를 저장할 수 있다.
  • 10진수 255 === 2진수 11111111 === 반으로 쪼개면 1111 1111 === 16진수 ff === 이것을 16진수임을 더 명확하게 보여주기 위해 0x라는 문자를 앞에 붙여 0xff로 표현한다.

생각해보기

  1. 숫자 50, 128, 256을 16진수로 표현한다면 어떻게 하면 될까요?
  • 50 -> 00110010 (2진수) -> 0xba (16진수)
    128 -> 10000000 (2진수) -> 0x80 (16진수)
    256 -> 100000000 (2진수) -> 0x100 (16진수)
  1. 왜 여러 가지 수 체계가 있을까요? 10진수만으로는 부족한가요?
  • 컴퓨터에서 사용하는 2진수나 16진수는 모두 각각 다른 기능을 수행한다. 2진수의 경우 숫자 알파벳이 0 혹은 1 두 가지로 이루어져 있기 때문에 electric signal의 존재 여부 (있거나 없거나)를 단위로 통신하는 컴퓨터가 해석하기 쉽다.
profile
Codestates Software Engineering Full IM 28th

0개의 댓글