데이터(✨중요)
정보 단위
비트 : 컴퓨터가 이해하는 가장 작은 정보 단위
N비트로 표현할 수 있는 정보의 갯수 ➡ 2^N
1 바이트 = 8 비트 (1byte는 "영문자" 한 글자가 저장될 수 있는 메모리 크기이며 용량의 최소단위)
1 킬로바이트 = 1000 바이트
1 메가바이트 = 1000 킬로바이트
1 기가바이트 = 1000 메가바이트
1 테라바이트 = 1000 기가바이트
참고로 이전 단위를 1024로 묶어 표현한 단위는 KiB, MiB, GiB, TiB 라고 표현한다.
추가적으로 4비트는 16가지, 8비트는 256가지, 16비트는 65,536가지이므로 16비트로 표현할 수 있는 용량의 최대 크기는 64KB가 된다. 용량을 표현하는 가장 작은 단위인 바이트를 경우의 수에 붙여주면 된다.
그렇다면 32비트는 4,294,967,296이므로 4GB로 표현할 수 있다. 구조상 관리할 수 있는 한계 용량이 4GB이다.
이진법
0과 1만으로 숫자를 표현하는 방법이다.
대략적인 개념은 알기에 이진수를 음수로 표현하는 방법에 대해 정리해보자.
0과 1만으로 음수를 표현하는 방법 중 가장 널리 사용되는 방법은 2의 보수를 구해 이 값을 음수로 간주하는 방법이다.
2의 보수의 사전적의미는 어떤 수를 그보다 큰 2^n에서 뺀 값이다.
하지만 사전적의미보다 쉽게 2의 보수를 구하는 방법이 있다.
예를 들어 11(2)의 보수를 구하고 싶을 때는 모든 0과 1을 뒤집은 다음에 거기에 1을 더하면 된다.
즉 11의 모든 0과 1을 뒤집으면 00이 되고 여기에 1을 더한 01(2)가 11의 2의 보수가 된다.
1011(2)도 마찬가지로 0100 + 1 = 0101(2) 가 1011의 음수이다.
십육진법
십육진법은 수가 15를 넘어가는 시점에 자리올림을 한다. 0 ~ F 까지의 표현으로 이루어져있다.
왜 십육진법을 사용할까? 주된 이유 중 하나는 이진수에서 십육진수로, 십육진수에서 이진수로의 변환이 쉽기 때문이다.
🎯십육진수를 이진수로 변환하기
십육진수를 이루는 숫자 하나를 이진수로 표현하기 위해서 필요한 비트수는 4비트이다. 한 비트당 이진수로 2가지 종류의 표현이 가능한데 16가지 종류를 표현하려면 총 4비트가 필요하기 때문이다.
이 원리를 이용해서 십육진수 한 글자를 4비트의 이진수로 간주한다. 즉, 십육진수를 이루는 글자 따로따로 4개의 이진수로 변환하고 이것을 이어 붙이면 된다.
예를 들어 1A2B라는 16진수가 있을 때 이를 2진수로 표현하면 다음과 같다.
1 ➡ 0001
A ➡ 10진법으로 10 ➡ 1010
2 ➡ 0010
B ➡ 10진법으로 11 ➡ 1011
이것을 모두 이어붙이면 0001101000101011(2) 이 된다.
C언어에서 prefix를 붙여서 0xF4 이렇게 16진수를 표현한다.
이때 핵심은 F4가 8비트라는 것이고 4비트씩 쪼개서 1111 0100 이렇게 이진수로 표현이 가능하다.
0xF4 (16진수) ➡ 15 4 (10진수) ➡ 1111 0100 (2진수)
🎯이진수를 십육진수로 변환하기
십육진수를 이진수로 변환할 때 4개씩 끊었다면 이제 반대로 4개씩 묶어서 16진수로 표현하면 된다.
11010101(2)을 16진수로 바꾸면 다음과 같다.
1101 ➡ 10진법으로 13 ➡ D
0101 ➡ 10진법으로 5 ➡ 5
따라서 D5(16)가 정답이다.
십육진수 표기가 사용되는 예
- RGB 색상표현
- 각각의 Red, Green, Blue는 8비트로 표현되며 표현되는 숫자의 경우의 수는 256가지이다.(0~255)
- 컴퓨터 하드웨어 주소 표현
- ex. 0x00000281848B1070
- 메모리 값 표현
컴퓨터가 문자를 표현하는 방법
그렇다면 우리가 입력한 문자를 컴퓨터는 어떻게 이해할 수 있을까?
우선 컴퓨터가 이해할 수 있는 문자들의 집합인 문자 집합이 있다. 그리고 우리가 문자를 입력하게 되면 인코딩의 과정을 거쳐 0과 1로 변환된다. 다시 0과 1로 표현된 문자는 디코딩의 과정을 거쳐 우리가 이해할 수 있는 문자로 변환된다.
인코딩의 방법 중 널리 사용되는 방법이 아스키 코드를 활용하는 것이다.
'A'의 아스키 코드는 십진법으로 65이다. 이 65를 이진수 1000001로 인코딩되고 컴퓨터는 'A'라는 문자를 인식할 수 있게 된다.
아스키 코드는 총 128개의 숫자 중 하나의 고유한 수에 문자가 일대일로 대응되며 매우 간단하게 인코딩되지만 종류가 많지 않아 모든 문자를 다루기 힘들다.
이를 해결하기 위해 유니코드가 등장했는데 유니코드는 문자를 표현할 때 가장 많이 사용되는 표준 문자집합이다.
유니코드는 각 문자마다 고유한 값이 부여되는데 이 고유한 값을 UTF-8 이라는 인코딩 방식을 통해 컴퓨터가 이해할 수 있는 값으로 인코딩 된다.
컴퓨터가 사진을 표현하는 방법

모니터 화면 상에 점 하나를 화소(Pixel)이라고 부른다. 이 화소들을 모아 사진을 만들 수 있는데 화소 하나도 컴퓨터는 0과 1로 이해할 수 있다. 화소 하나를 표현하는데 8비트, 16비트, 24비트, 32비트 정보가 필요할 수 있다.
보통 RGB는 각각의 R, G, B가 8bit를 가지므로 총 24bit 정보를 사용한다. 각각의 R, G, B는 0부터 255까지 총 256개의 숫자로 표현할 수 있다. 여기서 알파 채널이 추가되면 RGBA가 되는데 A는 투명도를 나타낸다. 이 경우에는 총 32bit 정보를 사용한다.
32bit의 정보를 사용할 때, 각각의 픽셀에 RGBA를 명시한 모든 집합체를 비트맵(bitmap)이라고 한다.
하지만 전체를 스캔하기 때문에 용량이 커지는 단점이 있어 jpg, png 등 압축 기술로 용량을 줄인다.
압축 기술은 모든 화소의 정보를 표현하지 않고 필요한 부분만 표현하므로 적은 용량으로 큰 사진을 표현할 수 있다.