사전 비트
개념

비트

gabury1고친 사람 github-actions[bot]

비트는 컴퓨터가 정보를 담고 나르는 가장 작은 단위입니다. 한 비트는 두 가지 중 어느 쪽인지를 하나 가려 줍니다. 그 두 가지를 0 과 1 로 적습니다. 컴퓨터 안의 모든 데이터는 결국 비트를 여러 개 늘어놓은 것입니다.

쉽고 빠른 이해

비트는 두 가지 중 어느 쪽인지를 하나 가려 주는 단위입니다. 전등이 켜졌는지 꺼졌는지를 적어 둔 쪽지 한 장이라고 보면 됩니다.

이 단위가 없으면 값을 담는 방법을 값마다 새로 정해야 합니다. 전기로 도는 회로는 두 상태를 가르는 일만 틀리지 않게 해냅니다. 그래서 모든 값을 두 상태의 나열로 바꿔 놓고 다룹니다.

쓰는 방법은 이렇습니다.

  1. 담고 싶은 것을 예·아니오 물음 여러 개로 쪼갭니다
  2. 물음 하나를 비트 하나에 0 또는 1 로 적습니다
  3. 비트를 정해진 개수만큼 늘어놓고 한 값으로 읽습니다

대가는 값 하나를 적는 데 비트가 여러 개 든다는 것입니다. 비트 여덟 개로 가릴 수 있는 것은 256 가지뿐이라, 더 넓은 값을 담으려면 비트를 더 써야 합니다.

상세

스무고개는 예와 아니오로만 답합니다. 물음 하나에 답이 하나씩 쌓입니다. 답이 스무 개쯤 모이면 처음에 아무도 몰랐던 하나가 정해집니다. 비트는 그렇게 쌓이는 답 한 개입니다.

비트는 0 또는 1 중 하나를 담는 가장 작은 단위입니다. 참과 거짓을 담는 불리언 값 하나가 비트 하나입니다. 어떤 설정이 켜졌는지 꺼졌는지를 적어 두는 표시도 비트 하나면 됩니다.

이름은 binary digit 을 줄인 것입니다. 두 가지 수, 그러니까 0 과 1 만 쓰는 자릿수라는 뜻입니다.

두 상태만 쓰는 이유

값을 굳이 두 가지로 자를 이유는 없어 보입니다. 전압을 열 단계로 쪼개 한 단계를 숫자 하나로 읽으면 한 칸에 열 가지를 담을 수 있습니다.

회로에서는 이것이 잘 안 됩니다. 전압은 열이 오르거나 선이 길어지면 조금씩 흔들립니다. 단계 사이가 좁을수록 그 흔들림 하나에 값이 옆 단계로 넘어갑니다.

단계를 둘만 두면 사이가 가장 넓어집니다. 어지간히 흔들려도 어느 쪽인지 틀리지 않습니다. 틀리지 않으니 값을 몇 번 옮겨 적어도 처음 그대로 남습니다.

표현력을 버리고 안 틀리는 쪽을 고른 결정입니다. 버린 표현력은 비트를 여러 개 나란히 놓아 메웁니다.

비트를 늘어놓아 만드는 수

비트 하나는 두 가지만 가립니다. 두 개를 나란히 놓으면 00 · 01 · 10 · 11 네 가지가 됩니다. 한 개 늘 때마다 가짓수가 두 배가 되어, 여덟 개를 늘어놓으면 256 가지를 가립니다.

앞에서 말한 자릿수마다 값이 하나씩 정해져 있습니다. 그 값을 자릿값이라고 합니다. 오른쪽 끝 자릿값이 1 이고 왼쪽으로 갈수록 두 배씩 커집니다. 1 이 선 비트 자리의 자릿값만 모두 더하면 그 수가 나옵니다.

여덟 비트로 적은 177 을 네 비트씩 두 덩이로 나눠 봅니다. 먼저 자릿값이 큰 위 네 비트입니다.

block-beta
columns 5
  z1["자릿값"] a["128"] b["64"] c["32"] d["16"]
  y1["비트"] e["1"] f["0"] g["1"] h["1"]

윗줄이 자릿값이고 아랫줄이 실제 비트입니다. 1 이 선 비트 자리의 자릿값은 128 · 32 · 16 입니다. 이어서 아래 네 비트입니다.

block-beta
columns 5
  z2["자릿값"] i["8"] j["4"] k["2"] l["1"]
  y2["비트"] m["0"] n["0"] o["0"] p["1"]

여기서 1 이 선 비트 자리의 자릿값은 1 하나입니다. 두 덩이를 합쳐 128 + 32 + 16 + 1 을 더하면 177 입니다. 이렇게 여덟 개를 한 묶음으로 다루는 것이 바이트 입니다.

비트 자리와 그 번호

비트 하나가 놓인 자릿수를 비트 자리라고 부릅니다. 비트 자리마다 오른쪽 끝부터 0 번 · 1 번 하고 번호를 붙입니다. 번호가 있어야 "몇 번째 비트가 1 이냐"를 말로 주고받을 수 있습니다. 자릿값이 가장 큰 왼쪽 끝은 최상위 비트, 가장 작은 오른쪽 끝은 최하위 비트 라고 부릅니다.

비트 자리를 골라 읽거나 바꾸는 계산을 비트 연산 이라고 합니다. 값을 한 덩이로 다루는 사칙연산과 달리 비트 자리 하나하나를 건드립니다. 자주 쓰는 것은 둘입니다.

하나는 시프트 입니다. 비트를 통째로 옆으로 밀어 비트 자리를 옮기는 연산입니다.

다른 하나는 비트 마스크 입니다. 보고 싶은 비트 자리만 남기고 나머지를 지우는 연산입니다.

두 연산을 앞의 수 177 에 걸어 봅니다. 0b 는 이 수를 이진수로 적었다는 표시이고 밑줄은 눈으로 끊어 읽으라고 넣은 것입니다. >> 가 시프트, & 가 비트 마스크입니다.

x = 0b1011_0001      // 177 (십진)
x >> 4               // 1011 · 십진 11
x & 0b0000_1111      // 0001 · 십진 1

오른쪽으로 네 칸 밀면 아래 네 비트가 밀려 나갑니다. 위 네 비트만 남습니다.

비트 마스크는 같은 비트 자리끼리 짝지어 양쪽 모두 1 인 곳만 1 로 남깁니다. 위 네 비트 자리는 0 과 만나 지워지므로, 시프트와 반대로 아래 네 비트가 남습니다. 한 바이트 안에 서로 다른 값 둘을 나눠 담아 두고 꺼내 쓸 때 쓰는 방법입니다.

크기의 비트와 속도의 비트

비트는 두 군데에서 잣대로 쓰입니다. 담아 둔 양을 셀 때와 선으로 보내는 속도를 잴 때입니다. 같은 낱말인데 세는 대상이 달라서 실무에서 자주 엇갈립니다.

담아 둔 양은 대개 바이트로 셉니다. 파일 크기와 메모리 용량이 그렇습니다.

선으로 보내는 속도는 비트로 잽니다. 초당 비트, 줄여서 bps 로 적습니다. 대역폭 을 말할 때 쓰는 단위입니다.

그래서 같은 글자가 대소문자로 갈립니다. 큰 B 는 바이트고 작은 b 는 비트입니다. 초당 100 메가비트라고 적힌 회선이 나르는 파일은 초당 12 메가바이트 남짓입니다. 회선 속도가 실제 체감보다 크게 적혀 보이는 것은 이 때문입니다.

네트워크는 선에 가까운 쪽부터 켜켜이 쌓은 계층으로 나뉩니다. 맨 아래 계층이 주고받는 단위가 비트입니다. 위쪽 계층에서 프레임 이나 패킷이라고 부르던 데이터 덩어리도 선 위에서는 비트 줄로 풀려 나갑니다. 회선이 실어 나르는 것이 결국 비트 줄이라, 속도를 비트로 재는 것이 셈에 맞습니다.

정보의 양을 재는 잣대

비트는 담는 그릇의 크기입니다. 담긴 내용의 양을 재는 단위이기도 합니다. 뒤엣것이 조금 다른 뜻입니다.

동전을 한 번 던져 앞뒤를 알아내는 데 필요한 답은 하나입니다. 이 하나를 정보 한 비트라고 셉니다. 앞뒤가 반반일 때가 한 비트입니다. 한쪽이 거의 확실하면 알아낼 것이 적어 한 비트에 못 미칩니다.

이 잣대가 압축 의 밑바탕입니다. 파일에 든 정보의 양이 파일이 차지한 비트 수보다 적으면, 그 차이만큼은 줄여도 잃는 것이 없습니다. 같은 글자가 되풀이되는 글은 그래서 많이 줄어듭니다. 다음 글자를 맞히기 쉬울수록 그 글자가 지고 있는 정보가 적습니다.

이렇게 잰 정보의 양에 붙은 이름이 엔트로피 입니다.

관련 항목

비트가 모여 이루는 크기 단위

바이트 · 니블 · 옥텟 · 워드 · 비트열 · 킬로바이트 · 캐시 라인

비트 자리를 직접 다루는 연산

비트 연산 · 비트 마스크 · 시프트 · 마스킹 · 비트 필드 · 플래그 · 비트맵

비트를 사람이 읽는 표기로 바꾸는 방법

이진수 · 16진수 · 헥사 덤프 · base64 · 자릿값

비트를 늘어놓는 차례를 정하는 규칙

엔디언 · 비트 순서 · 최상위 비트 · 최하위 비트 · 네트워크 바이트 순서 · 정렬

비트가 뒤집혔는지 확인하는 수단

패리티 비트 · 체크섬 · 해밍 거리 · 오류 정정 부호 · 순환 중복 검사

비트 수로 값의 범위가 정해지는 자료형

정수 · 부동소수점 · 불리언 · 부호 비트 · 2의 보수 · 오버플로

전송 속도를 비트로 재는 지표

비트레이트 · 대역폭 · 처리량 · 보율 · 초당 비트

비트를 물리로 담거나 실어 나르는 장치

메모리 · 레지스터 · 디스크 · 논리 게이트 · 트랜지스터 · 변조

정보의 양으로 비트를 세는 이론

엔트로피 · 압축 · 정보 이론 · 허프만 부호 · 무손실 압축

비트 단위를 실어 나르는 통신 계층

프레임 · 패킷 · 물리 계층 · 신호 · 직렬 통신

다른 이름: bit · binary digit · 이진 숫자