boostcource
모두를 위한 컴퓨터 과학 (CS50 2019) : David J. Malan
www.boostcourse.org/cs112
컴퓨터 과학 (Computer Science)
문제 해결에 대한 학문
입력(input)을 전달받아 출력(output)을 만들어내는 과정에서 중간에 있는 과정을 컴퓨터 과학이라고 한다.
2진법
우리가 일상에서 사용하는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 총 10개의 기호로 수를 표현하는 방식을 10진법이라고 한다.
"123" 을 우리가 "백이십삼" 이라고 읽는 이유는
"1x100 + 2x10 + 3x1 = 123" 과 같이 10의 거듭제곱으로 자리수를 표현하기 때문이다.
2진법은 10진법과 비교하자면
0과 1, 2개의 기호로 표현하는 방식,
2의 거듭제곱으로 자리수를 표현하는 방식이다.
2진법으로 표현된 "011"을 10진수로 표현해 읽어보자면
"0x2^2 + 1x2^1 + 1x2^0" 과 같이 2의 거듭제곱으로 해석할 수 있으며
계산 결과 2진법에서 11은 10진법에서 3임을 알 수 있다.
컴퓨터는 0 ~ 9 와 같은 다양한 숫자를 가지고 있지 않고, 오직 0과 1로만 데이터를 표현한다.
즉, 2진법을 사용한다.
이 2진법에 대해서 우리는 on/off 상태를 표현하는 스위치와 같이 비유해볼 수 있다.
스위치에 불이 들어온 on을 1, 스위치가 꺼진 off를 0과 같이.
그리고 컴퓨터는 아주 많은 스위치들로 구성되어있는 장치인 셈이다.
비트(bit)
정보를 저장하고 연산을 수행하는 컴퓨터가 사용하는 측정단위 비트(bit).
binary degit(이진 숫자)라는 뜻을 가졌고, 0과 1 두 가지 값만 가진다.
컴퓨터는 여러개의 비트로 디지털 데이터를 표현해 사용한다.
비트만으로 단위를 표현하기에는 한계가 있기 때문에 사용하는 것이 비트열이다.
- byte(바이트) : 8개의 bit로 만들어진 것. 2^8=256개의 서로 다른 바이트가 존재할 수 있다.
- Kbyte(KB, 킬로바이트) : 1,000개의 byte
- Mbyte(MB, 메가바이트) : 1,000개의 Kbyte
- Gbyte(GB, 기가바이트) : 1,000개의 Mbyte
더 큰 데이터 단위를 이용해서 조금 더 복잡한 유형의 데이터를 저장할 수 있다.
정보의 표현
스위치(on:1 off:0)로 숫자를 표현한다면, 문자는 어떻게 표현해야할까? 이것도 스위치를 이용한다.
세상에는 문자를 숫자로 표현할 수 있도록 정해진 약속(표준)이 있다.
그 약속 중 하나는 ASCII다.
ASCII(아스키코드)
American Standard Code for Information Interchange. 미국정보교환표준부호
영문 알파벳을 사용하는 대표적인 문자 인코딩 방식
총 128개의 부호로 정리되어 있으며
A~Z는 10진수로 65~90, a~z는 97~122로 표현 가능함을 알 수 있다.
A | B | C | D | E | F | G | H | I |
65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 |
J | K | L | M | N | O | P | Q | R |
74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 |
S | T | U | V | W | X | Y | Z | |
83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 |
예시로 A의 경우 10진수로 65.
2진수로는 "65 = 2^6 + 2^0" 로 계산 가능하여 "1000001" 과 같이 표현이 가능하다.
ASCII보다 더 다양한 문자를 표현하는 표준으로는 Unicode가 존재한다.
특수기호를 넘어서 😂과 같은 이모지 표현까지 가능한 표준이며
예시로 해당 이모지는 10진법으로는 128,514, 2진법으로는 11111011000000010 라고 한다.
그리고 그림과 영상, 음악 역시도 숫자로 표현이 가능하다.
예시로 그림을 표현하는데에는 pixel 과 RGB가 이용된다.
핵심은 컴퓨터가 2진법을 이용해 다양한 디지털 데이터를 표현할 수 있다는 점이다.
'CS > CS50' 카테고리의 다른 글
[CS][CS50] C언어 - 하드웨어의 한계 (2) | 2023.05.26 |
---|---|
[CS][CS50] C언어 - 사용자 정의 함수, 중첩 루프 (0) | 2023.05.24 |
[CS][CS50] C언어 - 자료형, 형식 지정자, 연산자 (0) | 2023.05.09 |
[CS][CS50] C언어 - C 기초 / 문자열 / 조건문과 루프 (0) | 2023.04.25 |
[CS][CS50] 컴퓨팅 사고 - 알고리즘 (0) | 2023.04.23 |