2진수는 인간이 이해하기에는 너무 어렵고, 숫자가 길어질 수 있다. 따라서, 컴퓨터의 데이터를 표현할 때 16진법도 많이 사용한다.
16진법은 수가 15을 넘어가는 시점에 자리 올림을 한다. 수학적 표기 방식으로는 아래첨자 16을 사용하고, 코드 상으로는 앞에 0x를 붙어 16진수라는 것을 표기한다.
U+라고 표기하기도 한다(유니코드에서 사용).
0부터 9까지는 동일하게 세고, 10부터는 주먹을 쥔 상태로 이해를 한다.
16진수는 4비트이다. 는 16이므로.
10진수도 있는데 왜 16진수를 사용하느냐 하면, 그것은 16진수와 2진수 간의 변환이 간단하고 쉽기 때문이 아닌가 한다.
아무튼, 16진수는 4비트로 표현할 수 있으므로 2진수에서 16진수로 변환할 때는 각 숫자를 4비트로 표현하기만 하면 된다.
즉, 4비트를 16진수 하나라고 생각하면 된다.
4비트씩 떼어, 그것을 2진수로 표현한다. 즉, 4비트는 16진수 한 자리 숫자다.
C언어같은 데에서는 0xF4처럼 앞에 ‘0x’를 붙여주기도 한다.
비트는 표현의 최소 수준이다.
컴퓨터는 0과 1만 이해할 수 있다. 전기가 흐르는 상태를 1로 따진다면, 전기가 흐르지 않는 상태를 0으로 표현하는 식이다.
비트는 컴퓨터가 이해하는, 0과 1을 표현하는 가장 작은 단위이다.
1비트로는 2가지의 정보(꺼짐과 켜짐)을 표현할 수 있다. 2비트로는 총 4개를, 3비트로는 8개의 정보를 표현할 수 있다.
즉, 비트 수가 n개라면 를 표현할 수 있다.
용량을 말할 때는 바이트 단위
우리는 평소에 비트 단위로 말하지 않는다. 비트보다 큰 단위로 말하는데, 그것은 아래와 같다.
단위 | 비트 |
---|---|
1바이트(Byte) | 8비트(bit) |
1킬로바이트(1kB) | 1,000바이트(1,000Byte) |
1메가바이트(1MB) | 1,000킬로바이트 |
1기가바이트(1GB) | 1,000메가바이트 |
1테라바이트(1TB) | 1,000기가바이트 |
이런 단위를 1024개씩 묶은 단위는 kiB(키비바이트), GiB(기비 바이트)라고 한다.
일부 문서는 1024씩 묶은 단위가 표에 정리한 단위다, 라고 이야기하는데 실제로는 둘은 단위가 다르다.
과거에는 정보의 단위가 크지 않았으니 1000개씩 묶으나 1024개씩 묶으나 별 차이가 없어서 두 용어를 혼용해서 썼으나, 최근에는 다루는 정보의 크기가 커지면서 그 차이도 커지게 됐다.
따라서, 1000씩 묶은 단위와 1024개씩 묶은 단위를 구별해서 쓰는 추세이다.
CPU가 한 번에 처리할 수 있는 정보의 크기 단위를 말한다. 예를 들어, 컴퓨터가 한 번에 32비트씩 다룰 수 있다면 1워드 크기는 32비트가 된다.
워드 단위의 파생 단위도 생겼는데, 아래와 같다.
컴퓨터는 0과 1만 이해할 수 있다. 그러므로, 우리 인간이 사용하는 문자를 컴퓨터에게 이해시키기 위해서는 0과 1로 표현해야 한다.
문자 집합이란, 컴퓨터가 이해할 수 있는 문자의 모음이다. 우리가 컴퓨터가 이해할 수 있도록 문자 하나에 숫자 하나를 매칭하고, 이 숫자는 이런 문자라는 의미야 하고 약속한 것과 비슷하다.
이 문자 집합은 여러 개가 있을 수 있으며, 매칭한 숫자를 ‘코드 포인트’라고 한다.
💡 문자 1과 숫자 1은 다르다!
알파벳, 아라비아 문자, 몇 개의 특수문자, 제어문자를 포함한 문자 집합으로, 8비트를 사용한다.
당연히 128개밖에 표현을 못하므로, 영어 외의 다른 언어를 표현할 수가 없다. 그 외의 특수문자도 마찬가지다.
이 8비트 중에 1비트는 오류 검출을 위한 패리티 비트로 사용하기 때문에, 실질적으로 문자를 표현하는 데에 사용하는 비트는 7비트이다.
7비트로는 128개의 문자를 표현할 수 있다. A는 65, a는 97 등이 그 예다. 여기서 A는 문자, 65는 코드 포인트가 된다.
그래서 우리는 언어별 문자 집합을 만들었다.
이 둘은 한국어를 표현하기 위해 만들어진 문자 집합이다. 이 문자집합를 인코딩하는 언어는 euc-kr 이다.
그런데, 이렇게 국가별로 언어를 정의하면 호환성이 너무 복잡해진다. 예를 들어 한국어, 영어, 중국어, 일본어를 제공하는 웹 사이트를 만들고 싶으면 총 4개의 문자 집합과 인코딩을 사용해야 하는 것이다.
그래서 등장한 것이 바로 통합된 문자 집합, 유니코드이다. 유니코드는 전 세계의 문자를 모두 담아내려고 한 문자 집합이며, 문자 하나 당 16비트를 사용한다.
이 유니코드를 인코딩하기 위해 나온 것이 utf-8, utf-16 등 이다.
이렇게 매칭된 숫자는 기본적으로 16진수로 표현되어 있다. 당연하게도 컴퓨터는 이 숫자를 이해하지 못한다. 이해하려면 0과 1로 바꿔줘야 한다.
인코딩은 이렇게 매칭된 코드 포인트를 컴퓨터가 이해할 수 있도록 변환하는 것을 말한다.
💡 16진수를 사용하는 이유는, 2진수와 12진수를 서로 변환하는 과정이 가장 간단하기 때문이다.
한국어 문자 집합을 인코딩하기 위해 사용하는 인코딩 방식이다.
유니코드를 인코딩하기 위해 사용하는 인코딩 방식이다. 이 인코딩 방식은 여러 가지가 있다.
대표적인 예로 UTF-8이 있는데, 각 문자별로 가변적인 비트 수를 사용한다. 코드 포인트의 범위가 어디에 속하느냐에 따라 달라지는 것이다.
인코딩이 컴퓨터가 이해할 수 있도록 0과 1로 바꾸는 것이라면, 디코딩은 역으로 인간이 이해할 수 있도록 변환하는 것을 말한다.
보통 디코딩은 잘 다루지 않는다.
위키백과에 따르면, 바이너리는 다음의 의미로도 쓰인다.
- 바이너리는 0과 1, 두 숫자로만 이루어진 이진법을 의미한다.
- 컴퓨터에서 정보는 이진 형태로 저장되며, 바이너리는 이진 파일(텍스트 형태가 아닌 이진 형태로 인코딩된 파일. 많이 쓰이진 않는다)을 의미한다.
- 프로그램 배포에서 소스코드가 아닌 실행 파일을 나타낸다.
출처: https://ko.wikipedia.org/wiki/바이너리
비트맵은 디지털 이미지를 저장하는 방식 중 하나입니다.
각 픽셀(화소)의 정보를 비트(0과 1) 단위로 저장하기 때문에 비트맵이라고 불립니다.
비트맵 이미지는 사진처럼 실제 이미지를 표현하는 데 적합하며, .bmp, .jpg, .png 등 다양한 파일 형식으로 저장됩니다.
비트맵을 .jpg로 저장할 수 있다는 것은 비트맵 이미지를 JPG 형식으로 변환할 수 있다는 의미이지, 비트맵 자체가 JPG라는 의미는 아닙니다. 비트맵과 JPG는 서로 다른 이미지 저장 방식입니다.
비트맵 이미지는 다양한 분야에서 활용되고 있습니다. 사진 촬영, 그림 그리기, 웹 디자인 등 다양한 작업에 비트맵 이미지를 사용할 수 있습니다.