거누의 개발노트

비트 모아 데이터 본문

CS

비트 모아 데이터

Gogozzi 2022. 5. 21. 23:15
반응형

디지털 시스템은 10진수를 사용하지 않고 모든 유형의 정보를 2진수로 표현한다.

십진수

십진수를 한자리로 표현하면 0 부터 9까지 10개의 숫자는 표현가능하다. 두자리 숫자는 0 부터 99까지, 세자리는 0 부터 999 까지 표현

십진수는 10의 거듭제곱의 합을 줄여 표기한 것이라고 생각하면 된다.

예를들어서, 1867은 1 x 10³ + 8 x 10² + 6 x 10¹ + 7 x 10⁰ 으로 1 x 1000 + 8 x 100 + 6 x 10 + 7 x 1로 표현 할 수 있다.

 

이진수

일련의 비트가 주어졌을 때, 각 자리의 숫자들을 10대신 2를 기수로 표현하고 0과 1만 사용하여 숫자를 표현하는 수다.

11101 같은 이진수는 1 x 2⁴ + 1 x 2³ + 1 x 2² + 0 x 2¹ + 1 x 2⁰ 으로 16+8+4+0+1, 즉 29를 표현한 것이다.

생각해보면 계산기는 10진수로 입력해서 10진수로 출력을 받는데, 계산기 안에서는 2진수로 변환해서 데이터를 연산될 겁니다.

변환하는 과정을 살펴보면 십진수를 2로 나누고 나눌 때마다 0 또는 1이 되는 나머지 값을 적고, 몫은 다음 나누기를 위한 값으로 사용한다.

1867을 이진수로 변환하는 과정을 보자.

나머지
1867 933 1
933 466 1
466 233 0
233 116 1
116 58 0
58 29 0
29 14 1
14 7 0
7 3 1
3 1 1
1 0 1

 

표에서 처럼 나머지수를 거꾸로 읽으면 11101001011이고 2의 거듭제곱을 합산해보면 1867이 나오는걸 알 수 있다.

이런 방식은 시간을 계산하는 과정과 비슷한데 시간에서는 기수가 60 이고 나타내는 숫자가 24가지라는 점이 다를 뿐, 이진수를 구하는 방법도 같은 원리라고 생각하면 이해가 쉽습니다.

 

2진수를 변환하는 다른 방법도 있는데 2의 거듭제곱을 하나씩 내려가면서 뺌으로써 십진수를 이진수로 변환할 수도 있는다고 한다.

거듭제곱 값을 뺄 때마다 1을 쓰고, 남은 값보다 거듭제곱 값이 크면 0을 쓰는 방법으로 접근 방식이 좀 더 직관적이지만 기계적으로 처리하기에는 좋지 않은 방법이라고 합니다.

 

바이트

비트 8개의 묶음은 바이트라고 한다.

문자를 표현 할 때나, 다른 명령어나 어떤 값들을 표현 할 때 사용 한다.

7비트 아스키코드 문자 집합 중 하나의 문자이거나, 뭔가 다른 것일 수 있다. (1비트는 다른 용도로 남겨 둔다고 함)

근데 왜 영어는 1바이트이고 한글은 2바이트 일까...?

1바이트로 256가지의 문자 조합을 만들 수 있는데 영어는 알파벳대소문자가 총 52개로 이루어져 있기 때문에 1바이트로 충분히 표현 가능하고, 한글은 초성 19개, 중성 21개, 종성 28개로 이루어 져있어서 11172개를 표현해야하기 때문에 한문자를 2바이트에 담아서 사용한다. ( 2바이트, 2¹⁶ = 65536 )

이런 이유도 있지만 컴퓨터가 영어권 국가에서 만들어졌기 때문도 있다고 한다.

 

십육진수

간단히 설명하면 이진수로 표현하려면 너무 많은 공간을 차지해서 대안으로 나온 표기법이다.

0       0000 2       0001 2       0010 3       0011
4       0100 5       0101 6       0110 7       0111
8       1000 9       1001 A       1010 B       1011
C       1100 D       1101 E       1110 F       1111

표에서 보이듯이 4개의 자리를 차지하는 걸 1자리로 줄인걸 볼 수 있다. (스타1 업그레이드 최대 255)

십육진수를 사용면서 8비트의 반인 4비트를 16진수는 한 글자로 나타내어 더 많은 양의 정보를 적은 공간으로 사용 할 수 있게 되었다.

웹페이지의 색상도 십육진수로 사용하는데 가장 일반적인 방법은 각 픽셀에 3바이트를 사용하는 것으로 각 바이트 적색의 양, 녹색의 양, 청색의 양을 표현하는데 쓰인다. 이 방법을 RGB 코딩이라고 한다.적색, 녹색, 청색의 양을 표현한것을 어느정도 비트를 가지고있는지 계산해보면 2⁸x2⁸x2⁸ = 16,777,216 이 나온다.

색상 명 RGB 색상표 기준 16진수 색상코드
빨강 RGB (255, 0, 0) #FF0000
초록 RGB (0, 255, 0) #00FF00
파랑 RGB (0, 0, 255) #0000FF
검정 RGB (0, 0, 0) #000000
흰색 RGB (255, 255, 255) #FFFFFF

표로보면 더 이해하기가 쉽다.

16진수 색상 코드를 보면 앞에 두개가 FF면 빨강, 두번째가 FF면 초록 이런식으로 쓰이고 FF보다 작은 값을 쓰면 어두워진다.

RGB 색상표 기준도 비슷한 원리이다. 제일 앞에 255가 진한 빨간색을 나타내고 다음은 초록, 파랑 순이다.

 

윈도우에서 32비트하고 64비트는 무슨 차이?

64비트, 32비트는 컴퓨터 CPU(중앙 처리 장치)가 데이터를 처리할 때 사용하는 ‘레지스터’의 크기를 말한다. 레지스터는 극히 소량의 데이터나 처리 중인 중간 결과를 일시적으로 기억해 두는 고속의 전용 영역을 말한다.

그러니까~ 64비트가 레지스터의 크기가 커서 32비트보다 많은 양의 데이터를 연산 할 수 있는 셈이다.
근데, 높을 수록 좋은건데 128비트나 그런건 왜 안 쓰냐, 안 쓰는게 아니라 컴퓨터의 가격이 올라가서 못쓰는거다.

결론

가장 중요한 사실은 비트모음의 의미가 상황에 따라 결정된다는 것이다.

그저 보이는 것만 가지고 비트가 무엇을 의미하는지 식별할 수는 없다.

비트의 모음이 문자도 될 수도 있고 사진, 음악, 색상, 어플리케이션의 명령어가 될 수 도 있다는 것을 이해하면 되는 것이다.

반응형
Comments