오늘 끝나면
이진수와 문자 표현
- ✓비트가 0 또는 1 한 자리이고 8비트가 1바이트임을 설명할 수 있다
- ✓8비트 이진수를 자리값의 합으로 십진수로 바꿀 수 있다
- ✓글자와 명령이 약속된 비트 패턴으로 저장되고, 해석이 뜻을 정한다는 것을 말할 수 있다
실습 미션
오른쪽 인코더에서 숫자 65를 만들고, 글자 탭에서 'A'가 같은 비트(01000001)임을 직접 확인한다. 그다음 'a'를 눌러 비트 한 자리만 바뀌는지도 본다.
성공 조건
- □01000001을 만들어 값이 65로 나오게 한다
- □글자 'A'의 ASCII 코드가 65, 'a'가 97임을 비트로 확인한다
- □비트 하나를 토글하면 값이 그 자리값만큼 바뀌는 것을 본다
0과 1 · 자리값 · ASCII
이진수와 문자 표현
컴퓨터는 0과 1만 안다. 숫자도 글자도 명령도 전부 비트 패턴으로 번역해야 읽힌다. 이진은 모든 데이터의 공통 언어다.
왜 0과 1만 쓰나, 스위치의 두 상태
컴퓨터 속은 결국 수많은 스위치다. 켜짐 아니면 꺼짐, 딱 두 상태뿐이다.
전압이 높으면 1, 낮으면 0으로 약속한다. 중간을 안 쓰니 잡음에 덜 흔들리고 틀릴 일이 적다.
10단계 전압을 구분하려 애쓰는 것보다, 있다와 없다 둘만 구분하는 게 훨씬 안 망가진다. 그래서 기계는 0과 1 두 기호만 다룬다.
이 한 자리를 비트라 부른다. 비트 하나는 0 또는 1 하나다. 비트 8개를 한 묶음으로 다루면 그게 1바이트다.
켜진 스위치 2개 · 비트 8자리 = 1바이트
이진수로 숫자를 표현한다, 자리값
우리가 쓰는 십진수는 자리마다 10의 거듭제곱이다. 124는 100+20+4로 쪼개진다.
이진수는 똑같은 원리인데 밑이 2다. 오른쪽부터 1, 2, 4, 8, 16, 32, 64, 128, 자리마다 2의 거듭제곱이다.
그 자리에 1이 켜져 있으면 자리값을 더하고, 0이면 건너뛴다. 켜진 자리값을 다 더하면 그게 숫자다.
예로 8비트 01000001은 64+1 = 65다. 비트 8개면 0부터 255까지, 256가지 숫자를 적을 수 있다.
64 + 1 = 65
8비트로 0부터 255까지 · 256가지
글자도 비트다, ASCII라는 약속표
글자는 모양이라 그냥은 셀 수 없다. 그래서 글자마다 번호를 미리 약속해 둔다.
그 약속표가 ASCII다. 1963년 미국에서 표준으로 만들었다. A는 65, B는 66, a는 97, 숫자 글자 '0'은 48이다.
글자를 이 정해진 비트 패턴으로 바꾸는 일이 인코딩이다. 'A'를 적으면 메모리에는 01000001로 저장된다.
대문자와 소문자는 딱 32(=100000) 차이라 비트 한 자리만 다르다. 이렇게 규칙이 있어 정렬도 변환도 계산으로 처리된다.
테두리 친 32 자리 하나만 다름 · 나머지 7비트는 똑같음
같은 비트, 약속이 뜻을 정한다, 인코딩
비트 패턴 자체에는 뜻이 없다. 01000001은 그냥 켜짐과 꺼짐의 줄일 뿐이다.
숫자로 읽기로 약속하면 65, 글자로 읽기로 약속하면 'A', CPU 명령으로 읽기로 약속하면 어떤 동작이다.
명령도 결국 비트다. 더해라, 옮겨라 같은 연산이 정해진 비트 코드로 적혀 있어 CPU가 그걸 읽고 실행한다.
그래서 같은 메모리 한 칸이 데이터도 되고 명령도 된다. 비트는 공통 언어이고, 해석이 그 뜻을 정한다.
직접 이진 인코더 해보기
오른쪽 인코더에서 숫자와 글자를 직접 8비트로 바꿔본다.
숫자 탭에서는 슬라이더를 움직이거나 비트를 직접 토글하며 자리값의 합이 값이 되는 것을 확인한다.
글자 탭에서는 글자 하나의 ASCII 비트가 뜬다. 같은 8비트가 숫자로도 글자로도 동시에 읽히는 것을 눈으로 확인한다.
외우지 말고 직접 움직여 본다. 비트가 곧 모든 데이터의 공통 언어라는 사실이 손에 잡힌다.
64 + 1 = 65
비트는 그저 0/1 패턴임. 숫자로 볼지 글자로 볼지는 약속이 정함.