비트·바이트·진법과 논리값
컴퓨터 안의 01000001은 그 자체로 문자도, 수 65도, 여덟 개의 참·거짓도 아니다. 같은 비트열을 어떤 규칙으로 읽느냐에 따라 의미가 달라진다. 따라서 “데이터가 저장돼 있다”는 말만으로는 부족하다. 몇 비트인지, 어떤 묶음인지, 어떤 부호·자료형으로 해석하고 어느 진법으로 표기하는지를 함께 알아야 한다.
0과 1만으로 주문번호와 참·거짓을 모두 표현하는 이유
컴퓨터 안의 01000001은 그 자체로 문자도, 수 65도, 여덟 개의 참·거짓도 아니다. 같은 비트열을 어떤 규칙으로 읽느냐에 따라 의미가 달라진다. 따라서 “데이터가 저장돼 있다”는 말만으로는 부족하다. 몇 비트인지, 어떤 묶음인지, 어떤 부호·자료형으로 해석하고 어느 진법으로 표기하는지를 함께 알아야 한다.
비트는 두 상태를 표현하고, 바이트는 비트를 다루기 쉬운 크기로 묶으며, 수 표현은 자릿값 규칙을 붙인다. 이 세 가지를 이해하면 이후의 정수 오버플로, 문자 깨짐, 메모리 주소와 파일 크기를 같은 뿌리에서 읽을 수 있다.
비트
비트(bit)는 0 또는 1의 두 상태를 표현하는 최소 정보단위다. 0과 1은 물리 장치의 두 안정 상태를 구분하기 위한 기호이며, 문맥에 따라 꺼짐/켜짐, 거짓/참, 선택 안 함/선택함을 뜻할 수 있다. 비트 하나는 두 경우, 비트 n개는 서로 다른 2^n개 조합을 표현한다.
직접 세면 한 비트는 0,1 두 개이고 두 비트는 00,01,10,11 네 개다. 앞에 한 비트를 더 붙이면 각 조합 앞에 0 또는 1 두 선택이 생겨 000,001,010,011,100,101,110,111 여덟 개가 된다. 자리가 하나 늘 때마다 경우의 수가 두 배가 되는 것이다.
2³의 오른쪽 위 3은 2를 세 번 곱하라는 횟수여서 2×2×2=8이다. 일반적인 2ⁿ도 같은 규칙이다. 아무 자리도 선택하지 않는 빈 배열 한 가지를 2⁰=1로 세므로 조합 수와 자릿값의 시작을 혼동하지 않는다. 8비트는 2를 여덟 번 곱해 256가지이며, 0부터 번호를 붙이면 마지막 번호는 255다.
바이트와 수 표현 전에 비트를 다시 확인한다
비트는 0 또는 1의 두 상태를 표현하며 여러 비트를 묶으면 더 많은 조합을 만들 수 있다. 이제 같은 비트를 묶는 단위와 자릿값 규칙이 어떻게 다른 의미를 만드는지 본다.
같은 비트열에 해석 규칙을 붙인다
상자 안의 대상과 화살표의 조건을 함께 읽으세요. 좁은 화면에서는 같은 관계를 세로로 재배치한 도식을 보여 줍니다.
0/1 비트를 묶어 보통 8비트의 바이트로 다룬다. 같은 비트열에 자릿값·길이·부호·자료형 계약을 붙여야 수·논리값·플래그의 의미가 정해진다. 진법은 같은 값의 표기를 바꾸며 비트 수의 조합 계산과 특정 값 해석은 구별한다.
비트열의 값과 그 비트열을 사람이 읽는 표기법을 구분한다.
바이트
바이트(byte, B)는 보통 8개의 비트를 묶은 저장·주소 단위다. 8비트는 2^8=256개의 서로 다른 조합을 만든다. 파일 크기의 B는 바이트를 뜻하고, 통신속도에서 자주 보는 소문자 b는 비트를 뜻하므로 대소문자를 구분한다.
수 표현
수 표현에서는 저장 비트를 정한 길이·부호·자료형 규칙으로 해석하고, 얻은 수를 진법과 자릿값으로 표기한다. 예를 들어 부호 없는 8비트 00101101이 나타내는 수는 45이며, 십진수 45와 십육진수 2D는 그 같은 수를 적는 서로 다른 표기다. 표기 진법을 바꾼다고 저장된 값이나 비트가 저절로 바뀌지는 않는다. 밑이 b인 진법에서 오른쪽부터 각 자리는 b^0, b^1, b^2, …의 값을 가진다. 이진법은 밑이 2라서 각 자리에 0 또는 1만 놓고, 십육진법은 네 비트를 한 자리로 짧게 적기 위해 0~9와 A~F를 사용한다.
십진수 45는 4×10+5×1처럼 각 자리의 숫자에 자릿값을 곱해 더한다. 이진수 101은 같은 방법으로 1×4+0×2+1×1=5다. 오른쪽부터 1, 2, 4로 두 배씩 커지는 자릿값이 각각 2⁰,2¹,2²이며 자리의 숫자는 0 또는 1이다. 따라서 조합을 세는 2ⁿ과 특정 비트열의 값을 구하는 자릿값 합은 연결되어 있지만 같은 계산은 아니다.
101₂처럼 오른쪽 아래에 붙은 작은 2는 이진법으로 읽으라는 표시이지 곱할 수가 아니다. 십육진법의 A, B, C, D, E, F는 각각 10, 11, 12, 13, 14, 15를 한 자리로 적은 기호다. 예를 들어 2D₁₆은 2×16+13×1=45이며 0x2D도 흔히 같은 십육진수임을 알리는 표기다. 따라서 한 바이트를 두 자리 십육진수로 적으면 각 자리의 네 비트씩, 총 여덟 비트를 읽는 셈이다.
00101101을 읽어 보자
비트열 0 0 1 0 1 1 0 1
자릿값 128 64 32 16 8 4 2 1
선택값 0 0 32 0 8 4 0 1 = 45왼쪽의 0을 더 붙여도 부호 없는 정수값은 45로 같다. 45를 십육진법으로는 2D라고 쓴다. 0010이 2, 1101이 13(D)이기 때문이다. 그러나 이 결과는 “8비트 부호 없는 이진 정수”라는 해석 규칙을 붙였을 때만 성립한다.
논리값에서는 보통 두 상태만 필요하다. 비교식 재고 > 0의 결과는 참 또는 거짓이고, 조건문은 그 결과에 따라 다음 실행을 고른다. 여러 개의 독립적인 켜짐/꺼짐 상태는 한 바이트의 각 비트에 배치할 수도 있지만, 어느 자리가 무엇을 뜻하는지 계약이 없으면 해석할 수 없다.
BR-1: 필요한 상태 수에서 비트 수와 표기를 직접 계산한다
5가지 서로 다른 상태를 구별하려면 2비트의 4개 조합으로는 부족하고 3비트의 8개 조합이면 충분하다. 따라서 최소 3비트가 필요하다.
십진수 45는 32+8+4+1이므로 이진수 00101101₂이고, 네 비트씩 묶으면 십육진수 2D₁₆이다. 세 표기는 같은 값을 서로 다른 방식으로 적은 것이다.
8비트가 만들 수 있는 조합 수는 256개다. 이 사실만으로 11111111이 항상 255라고 결론 내리지는 않는다. 부호 없는 정수라는 해석 계약에서는 255지만 다른 자료형 계약은 같은 비트열에 다른 의미를 줄 수 있다.
표현을 고를 때 보는 세 가지
| 질문 | 판단 | 예 |
|---|---|---|
| 몇 가지 상태가 필요한가 | 필요한 최소 비트 수를 정한다 | 5가지 상태는 최소 3비트 |
| 사람이 읽을 것인가 | 이진수 대신 십진수·십육진수를 고른다 | 메모리 값 FF는 11111111보다 짧다 |
| 값인가 표시인가 | 산술할 수인지 독립 상태 묶음인지 정한다 | 00000101은 수 5 또는 두 플래그의 켜짐 |
비트 수를 늘리면 표현 범위가 커지지만 저장·전송량도 늘어난다. 반대로 지나치게 줄이면 필요한 상태를 표현할 수 없다. 진법은 값을 바꾸는 것이 아니라 같은 값을 적는 방법을 바꾼다.
흔한 실패
단위 혼동은 100 Mb/s와 100 MB/s를 같다고 읽는 경우다. 전자는 초당 비트, 후자는 초당 바이트이므로 표기와 환산 기준을 확인한다.
여기서 /s는 “1초마다”라는 뜻이고 M을 십진 기준 1,000,000으로 둔 교육용 계산이라면 100 Mb/s ÷ 8 = 12.5 MB/s다. 1바이트에 8비트가 들어 있으므로 비트 수를 바이트 수로 바꿀 때 8로 나눈다. 이는 같은 양의 단위만 바꾼 값이며 실제 파일 전송시간은 추가 통신정보나 대기 때문에 달라질 수 있다.
해석 규칙 누락은 비트열만 보내고 길이·부호·자료형을 알리지 않는 경우다. 보내는 쪽과 받는 쪽이 같은 바이트를 다른 값으로 읽는다.
표현 범위 초과는 n비트가 담을 수 있는 조합보다 많은 값을 넣는 경우다. 필요한 최솟값·최댓값과 예외값까지 계산해 비트 수를 정한다.
논리값과 수의 혼동은 0이 아닌 모든 값을 참으로 볼지 1만 참으로 볼지 합의하지 않은 데서 생긴다. 언어와 데이터 계약의 규칙을 명시적으로 따른다.
자체 10점 문제
비트·바이트·진법의 관계와 데이터 표현 시 고려사항을 설명하시오.
요구어는 설명이다. 조합 수, 바이트 묶음, 진법 표기와 해석 계약을 한 흐름으로 연결한다.
10점 풀이 방향과 모범답안 보기
10점 답안 목차
- 비트와 조합 수
- 바이트와 단위
- 진법·자릿값과 같은 값의 다른 표기
- 길이·부호·자료형 해석 계약
- 범위·단위 혼동의 실패조건
10점 답안 도식
n비트의 조합 수는 2^n개다. 이를 바이트 묶음과 해석 계약에 연결한다. 바이트에 길이·부호·자료형 계약을 붙여 실제 값을 읽고 진법으로 표기하며, 조합 수를 센 결과를 특정 비트열의 값으로 혼동하지 않는다.
모범답안 축약본: 비트열에는 해석 계약이 필요하다
문제: 비트·바이트·진법의 관계와 데이터 표현 시 고려사항을 설명하시오. 비트는 0과 1로 구분하는 정보의 최소 단위이고 n비트는 2^n개의 서로 다른 조합을 만든다. 바이트는 보통 8비트 묶음이므로 1바이트는 256개 조합을 표현한다. 진법은 같은 수를 사람이 표기하는 방식으로, 1010₂, 10₁₀, A₁₆은 같은 수를 나타낼 수 있다. 그러나 비트열 자체에는 의미가 없다. 길이, 부호 여부, 수·문자·논리값이라는 자료형이 합의되어야 값이 된다. 예를 들어 8비트 부호 없는 정수는 0~255지만 같은 조합을 부호 있는 값으로 읽으면 범위와 의미가 달라진다. 따라서 필요한 최솟값·최댓값과 예외값으로 비트 수를 정하고, 송수신 계약에 길이·자료형·부호를 명시해 표현 범위 초과와 상이한 해석을 막는다.
출처와 적용 경계
이 절은 정보 표현의 안정된 선수개념과 자체 계산 예를 사용한다. 같은 값의 이진·십진 표기 차이는 Python 공식 부동소수점 설명의 첫 예에서 확인할 수 있다. RFC 5234 §2.3·Appendix B.1은 표기의 진법과 8비트 옥텟을 구별한다. 이 자료의 문법·구현을 본문의 자체 비트 모형과 동일시하지 않는다. 특정 CPU·언어·파일형식의 실제 비트 배치는 해당 사양을 확인하며, BR-1의 상태 수와 표기는 교육용 유한 예다.
30초 정리
- 비트는 두 상태,
n비트는2^n개 조합을 표현하며 바이트는 보통 8비트의 묶음이다. - 비트열의 의미는 길이·부호·자료형 같은 해석 규칙이 정하고, 진법은 얻은 수의 표기 방식을 정한다.
- 비트 수는 범위와 비용을, 진법은 사람이 값을 적고 읽는 방식을 바꾼다.
자기교정과 조건 변경
| 잘못 쓴 답 | 왜 틀렸는가 | 고쳐 쓸 내용 | 복습 |
|---|---|---|---|
| 5가지 상태는 2비트면 된다 | 2²=4개뿐이다 | 최소 3비트가 필요하다 | BR-1 |
| 2D와 00101101은 다른 값이다 | 표기법과 값을 혼동했다 | 둘 다 십진수 45다 | 계산 |
| 1바이트는 항상 문자 1개다 | 바이트와 문자 인코딩을 혼동했다 | 바이트는 저장 단위이고 문자는 뒤 절의 인코딩 규칙이 정한다 | 바이트 |
| 11111111은 언제나 255다 | 자료형·부호 계약을 생략했다 | 부호 없는 8비트일 때 255라고 한정한다 | BR-1 |
| 100 Mb/s와 100 MB/s는 같다 | bit와 byte 단위를 혼동했다 | 대소문자와 환산 기준을 확인한다 | 실패 |
상태가 9가지로 늘면? 3비트의 8개 조합으로 부족하므로 최소 4비트가 필요하다.
45를 16진수 한 자리로 적으려 하면? 한 자리 16진수는 0~15만 표현하므로 두 자리 2D가 필요하다.
8비트를 독립 플래그 8개로 쓰면? 수 0~255의 의미가 아니라 각 자리의 켜짐/꺼짐 의미를 별도 계약해야 한다.