[CORE-002][입문] 0과 1로 비트·바이트·진법 이해하기 > IT 기술 공유

본문 바로가기
사이트 내 전체검색

IT 기술 공유

[CORE-002][입문] 0과 1로 비트·바이트·진법 이해하기

페이지 정보

profile_image
작성자 기술팀장
댓글 0건 조회 273회 작성일 26-08-29 12:32

본문

[이번 수업]
컴퓨터 화면에는 글자와 사진이 보이지만 저장과 계산의 바닥에는 0과 1이 있습니다. 이번에는 비트와 바이트의 뜻, 2진수·10진수·16진수의 자릿값을 배우고 같은 숫자를 여러 진법으로 표현해 봅니다.

[선수지식]
덧셈과 거듭제곱의 뜻을 알면 충분합니다. Python 파일을 저장하고 터미널에서 실행할 수 있으면 실습을 바로 따라 할 수 있습니다.

[학습목표]
1. 비트와 바이트의 관계를 설명한다.
2. 자릿값을 이용해 2진수를 10진수로 바꾼다.
3. 같은 값을 2진수와 16진수로 표현한다.

[핵심개념]
비트(bit)는 binary digit, 즉 0 또는 1인 이진 숫자 하나입니다. NIST 용어집도 비트를 0이나 1인 이진 숫자로 정의합니다. 비트 하나로는 두 상태를 나타내고, 비트가 n개면 2의 n제곱 개 조합을 만들 수 있습니다. 예를 들어 2비트는 00, 01, 10, 11의 네 조합을 가집니다.

바이트(byte)는 8비트의 묶음입니다. 8비트로는 2의 8제곱인 256개 조합을 만들 수 있습니다. 부호 없는 정수로 해석하면 00000000은 0, 11111111은 255입니다. 중요한 점은 비트 모양만으로 의미가 정해지지 않는다는 것입니다. 같은 8비트를 숫자, 글자의 일부, 색상 값, 명령 등 어떤 규칙으로 해석할지는 프로그램과 데이터 형식이 정합니다.

진법은 한 자리에 쓸 수 있는 숫자의 개수와 자릿값 규칙입니다. 우리가 평소 쓰는 10진수는 0부터 9까지 사용하고 오른쪽부터 1, 10, 100의 자릿값을 가집니다. 2진수는 0과 1만 사용하고 오른쪽부터 1, 2, 4, 8, 16처럼 2의 거듭제곱이 됩니다. 따라서 00101010은 32 + 8 + 2이므로 10진수 42입니다. 앞의 0은 값은 바꾸지 않지만 8비트 폭을 보여 줍니다.

16진수는 0부터 9와 A부터 F를 사용합니다. A는 10, F는 15입니다. 16은 2의 4제곱이므로 16진수 한 자리는 정확히 4비트와 대응합니다. 2진수 0010 1010을 네 자리씩 나누면 0010은 2, 1010은 A이므로 16진수 2A입니다. 긴 비트 패턴을 짧게 읽을 수 있어 메모리 주소, 색상, 파일 내용 표시 등에 자주 사용됩니다. Python에서는 2진수 앞에 0b, 16진수 앞에 0x를 붙여 표기할 수 있습니다.

비트와 바이트 표기는 대소문자를 구분해서 읽는 습관이 좋습니다. 보통 b는 bit, B는 byte를 뜻하므로 8 Mb와 8 MB는 양이 다릅니다. 또한 저장장치 표기의 kB·MB와 운영체제가 보여 주는 KiB·MiB는 1,000 단위와 1,024 단위 차이가 날 수 있습니다. 단위와 기준을 함께 확인하세요.

[따라하기]
아래를 number_bases.py로 저장합니다.

number = 42
print("decimal:", number)
print("binary:", format(number, "08b"))
print("hex:", format(number, "02X"))
print("from binary:", int("00101010", 2))
print("one-byte patterns:", 2 ** 8)

Windows에서는 py number_bases.py, macOS와 Linux에서는 python3 number_bases.py를 실행합니다. 예상 결과는 다음과 같습니다.

decimal: 42
binary: 00101010
hex: 2A
from binary: 42
one-byte patterns: 256

08b는 2진수를 최소 8자리로 만들고 빈 앞자리를 0으로 채우라는 형식입니다. 02X는 대문자 16진수를 최소 두 자리로 표시합니다. int의 두 번째 인수 2는 앞 문자열을 2진수로 읽으라는 뜻입니다. 숫자의 값은 같고 출력 표현만 달라집니다.

[흔한 실수]
2진수 10을 10진수 십으로 읽지 마세요. 2진수에서는 자릿값이 2와 1이므로 값은 2입니다. 1바이트가 255개 값을 가진다고 착각하기 쉽지만 0을 포함해 256개입니다. 16진수 문자열을 10진수로 파싱하거나, 숫자의 표시 길이를 실제 저장 크기와 같다고 단정하는 실수도 피해야 합니다.

[보안 주의]
2진수나 16진수로 바꾸는 것은 암호화가 아닙니다. 비밀값을 진법만 바꿔 공개하면 누구나 되돌릴 수 있습니다. 외부 입력을 int로 변환할 때는 허용 진법, 글자 수, 값 범위를 먼저 제한하고 변환 실패를 처리하세요. 지나치게 긴 숫자는 계산 시간과 메모리를 낭비하게 할 수 있습니다. 파일 바이트를 다룰 때는 길이와 인코딩을 확인하고 신뢰하지 않는 데이터를 명령이나 코드로 실행하지 마세요.

[직접 해볼 과제]
10진수 13과 255를 손으로 2진수와 16진수로 바꾼 뒤 number 값을 바꿔 결과를 확인하세요. 13은 8비트로 앞을 0으로 채우고, 어떤 4비트 묶음이 어떤 16진수 한 자리에 대응하는지 적습니다. 마지막으로 2 ** 4와 2 ** 16이 각각 몇 가지 조합인지 출력하세요.

[확인문제]
1. 8비트로 만들 수 있는 조합은 몇 개인가요?
2. 2진수 00101010이 10진수 42가 되는 과정을 설명할 수 있나요?
3. 16진수 한 자리가 4비트와 정확히 대응하는 이유는 무엇인가요?

[다음 학습]
순환 커리큘럼의 다음 수업은 CS-002 ‘조건문과 반복문’입니다. 컴퓨터·디지털 기초 트랙에서는 CORE-003 ‘CPU·메모리·저장장치의 역할’로 이어집니다.

[공식 참고 자료]
NIST CSRC Bit Glossary
https://csrc.nist.gov/glossary/term/bit
NIST CSRC Byte Glossary
https://csrc.nist.gov/glossary/term/byte
Python Built-in Functions: bin, format, int
https://docs.python.org/3/library/functions.html#bin
Python Numeric Types
https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

접속자집계

오늘
4,737
어제
6,862
최대
16,772
전체
770,688
Copyright © 소유하신 도메인. All rights reserved.