바이트
고친 사람 github-actions[bot]
바이트는 컴퓨터가 데이터의 양을 세고 주고받을 때 쓰는 기본 단위입니다. 메모리 한 칸이 담는 양도, 파일의 크기를 재는 잣대도 이 단위입니다. 오늘날에는 비트 여덟 개가 한 바이트입니다.
쉽고 빠른 이해
바이트는 데이터의 양을 세는 기본 단위입니다. 사진 파일이 2메가바이트라고 할 때의 그 단위입니다.
이 단위가 없으면 모든 크기를 비트 하나하나로 세야 합니다. 기계는 비트 하나만 따로 집어 오지 못합니다. 늘 여덟 개씩 묶어 다룹니다. 세는 단위와 다루는 단위가 어긋나면 계산이 번거로워집니다.
쓰는 방법은 이렇습니다.
- 비트 여덟 개를 묶어 한 바이트로 만듭니다
- 메모리와 파일에서 바이트마다 주소를 매깁니다
- 한 바이트에 안 들어가는 값은 바이트 여러 개를 이어 붙여 담습니다
대가는 여덟 비트보다 작은 값도 한 바이트를 차지한다는 것입니다. 참과 거짓 하나만 담아도 여덟 비트를 씁니다.
상세
계란은 가게에서 한 알씩 팔지 않습니다. 열 알이나 서른 알을 한 판에 담아 팝니다. 창고에 쌓을 때도, 값을 매길 때도 판이 단위입니다. 바이트도 그런 묶음 단위입니다.
바이트는 비트 여덟 개를 하나로 묶은 단위입니다. 비트는 0 또는 1 하나를 담는 가장 작은 단위입니다. 한 바이트를 펼쳐 놓으면 0 또는 1 이 하나씩 들어가는 칸 여덟 개입니다.
block-beta columns 8 b1["1"] b2["0"] b3["1"] b4["1"] b5["0"] b6["0"] b7["0"] b8["1"] byte["한 바이트"]:8
칸 여덟 개가 모이면 0과 1의 조합이 256가지 나옵니다. 음수를 쓰지 않는 수로 읽으면 0부터 255까지를 담습니다. 영문 글자 하나가 딱 이만큼에 들어갑니다.
비트가 아니라 바이트로 세는 이유
메모리는 칸마다 번호를 매겨 둡니다. 칸마다 매긴 이 번호를 주소라고 부릅니다. 프로그램은 주소를 대서 값을 꺼냅니다.
주소를 비트마다 매기면 주소가 여덟 배로 늘어납니다. 주소는 그 자체가 메모리에 담기는 값이라, 주소가 길어지면 주소를 담는 데 드는 메모리도 같이 늘어납니다. 그래서 비트마다 주소를 매기지 않습니다.
기계 쪽 사정도 같습니다. 회로는 비트 하나만 따로 읽어 오지 못합니다. 메모리에서 값을 가져올 때는 적어도 바이트 단위로 옮깁니다. 대개는 그보다 큰 덩어리째 옮깁니다.
세는 단위는 바이트, 다루는 단위도 바이트입니다. 둘을 같은 크기로 맞춰 놓은 것이 이 단위입니다.
한 바이트를 읽는 세 표기
같은 한 바이트라도 사람이 적을 때는 표기가 셋으로 갈립니다. 16진은 0부터 9까지와 a부터 f까지 열여섯 글자로 수를 적는 표기입니다. 어느 쪽으로 적어도 기계 안의 값은 하나입니다.
위에서 그린 한 바이트 1011 0001 을 셋으로 적어 보겠습니다.
| 표기 | 같은 바이트를 적은 꼴 |
|---|---|
| 이진 | 1011 0001 |
| 십진 | 177 |
| 16진 | 0xb1 |
실무에서 바이트를 눈으로 볼 때는 대개 16진 표기를 씁니다. 네 비트가 16진 글자 하나에 그대로 대응해서, 여덟 비트가 언제나 글자 두 개로 떨어지기 때문입니다. 이진으로 적으면 글자가 여덟 개라 깁니다. 십진으로 적으면 몇 글자가 될지 값마다 달라집니다.
여러 바이트를 이어 붙이기
0부터 255 밖의 수는 한 바이트에 안 들어갑니다. 그럴 때는 바이트 여러 개를 나란히 놓고 한 값으로 읽습니다. 흔히 쓰는 정수 하나는 네 바이트를 씁니다. 그러면 메모리 칸 네 개를 차지합니다.
칸을 나란히 놓고 나면 물음이 하나 생깁니다. 큰 자릿수를 앞 칸에 둘지 뒤 칸에 둘지입니다. 기계마다 답이 달라서 이 차례에는 엔디언이라는 이름이 붙어 있습니다. 파일 첫머리에 어느 차례를 썼는지 밝히는 바이트 순서 표시도 있습니다.
바이트로 크기를 세는 법
파일과 메모리의 크기는 바이트 개수로 잽니다. 수가 커지면 킬로바이트·메가바이트·기가바이트처럼 앞에 배수 이름을 붙여 줄여 부릅니다.
여기에 갈림이 하나 있습니다. 킬로바이트를 1000 바이트로 세는 쪽과 1024 바이트로 세는 쪽이 있습니다. 저장 장치를 파는 쪽은 1000 으로 셉니다. 운영체제는 1024 로 세는 일이 많습니다.
그래서 1000 으로 세어 500기가바이트라고 적힌 디스크가 1024 로 세는 운영체제에서는 약 466기가바이트로 보입니다.
헷갈림을 줄이려고 1024 쪽에는 키비바이트·메비바이트라는 이름이 따로 있습니다. 다만 말로 할 때는 여전히 킬로바이트라고 부릅니다. 어느 쪽을 뜻하는지는 문맥으로 가릅니다.
바이트 크기가 기계마다 달랐던 때
바이트는 원래 「기계가 글자 하나를 담는 데 쓰는 비트 묶음」이라는 뜻이었습니다. 그 크기는 기계를 만든 쪽이 정했습니다. 한 바이트가 여섯 비트인 기계도, 아홉 비트인 기계도 있었습니다.
한 기계 안에서만 도는 프로그램에는 이것이 문제가 아니었습니다. 문서에 한 바이트라고 적으면 그 기계의 바이트를 뜻했기 때문입니다.
프로토콜은 사정이 달랐습니다. 서로 다른 기계가 같은 문서를 읽고 저마다 구현하기 때문입니다. 그래서 여덟이라는 수를 이름에 박은 옥텟이 따로 쓰입니다.
오늘날 바이트는 여덟 비트로 굳었습니다. 그래도 여러 구현이 나눠 읽는 문서는 지금도 옥텟이라고 씁니다.
관련 항목
바이트를 이루거나 바이트가 모여 이루는 크기 단위
비트 · 니블 · 옥텟 · 워드 · 비트열 · 킬로바이트 · 캐시 라인 · 페이지
바이트 여럿을 늘어놓는 차례를 정하는 규칙
엔디언 · 네트워크 바이트 순서 · 바이트 순서 표시 · 정렬 · 패딩
바이트를 사람이 읽는 표기로 바꾸는 방법
16진수 · 이진수 · 헥사 덤프 · base64 · 비트 마스크
글자를 바이트로 옮기는 인코딩
ASCII · UTF-8 · 유니코드 · 문자 인코딩 · 코드 포인트
바이트 단위로 번호를 매기는 저장 공간
메모리 · 메모리 주소 · 주소 · 오프셋 · 레지스터 · 디스크 · 섹터
바이트 묶음을 실어 나르는 통신 단위
패킷 · 프레임 · 헤더 · 페이로드 · 스트림 · 프로토콜
바이트 안의 비트를 직접 다루는 연산
비트 연산 · 시프트 · 마스킹 · 패리티 비트 · 체크섬
바이트로 값을 담는 자료형
정수 · 부동소수점 · 문자열 · 바이트 배열 · 불리언
다른 이름: byte