🎮 이 단원이 게임에서 쓰이는 곳 (언더테일·RPG)
보수·부호 비트 = 게임에서 데미지 -5, 골드 감소처럼 음수를 저장할 때 2의 보수로 저장해요. "n비트로 표현 가능한 범위"는 부호 있으면 -2^(n-1)~2^(n-1)-1, 부호 없으면 0~2^n-1이라서 HP·스탯 최대값 설계할 때 쓰입니다. 인코딩은 대사·아이템 이름 같은 문자열을 파일에 저장할 때 UTF-8 등으로 쓰여요.
부호 비트 — 먼저 이걸 구분하자
교과서에서 "부호 있는 수", "부호 없는 수"라고 나오면 맨 앞 비트 한 칸을 뭘로 쓰느냐만 구분하면 돼요.
비트 한 줄이 있을 때, 맨 왼쪽 한 칸을 "양수/음수 표시"로 쓰면 부호 있는 수, 그 칸까지 그냥 "숫자 크기"로만 쓰면 부호 없는 수예요.
4비트 예시 (맨 앞 = 부호 비트라고 생각할 때)
[맨 앞 1칸] [나머지 3칸]
부호 크기
0 = 양수 000~111 → 양수 0~7
1 = 음수 (2의 보수로 해석) → 음수 -8~-1
- 부호 없는 수: 맨 앞 칸도 그냥 숫자로 씀. 4비트면 0000~1111 = 0~15. 음수 없음.
- 부호 있는 수: 맨 앞 칸을 부호 비트로 씀. 0이면 양수, 1이면 음수. 나머지 비트는 2의 보수 방식으로 해석해서 4비트면 -8~7 같은 식으로 표현해요.
정리하면, 부호 비트 = "맨 앞 한 비트가 부호(+,−)를 나타낸다"고 정해 둔 것이에요. "부호 있는 수"일 때만 그 비트를 부호로 쓰고, "부호 없는 수"일 때는 그 비트도 그냥 크기로만 써서 헷갈리지 말면 돼요.
프로그래밍 기능사에서: 보수 문제에 "부호 비트(사인 비트)"가 나오는지 판단하는 기준
보수 변환 문제를 풀 때, 부호 비트를 언급해야 하는지는 아래처럼 보면 돼요.
- 부호 비트 관련이라고 보면 되는 경우
- 문제에 "부호 있는 수", "signed(사인드)", "음수의 2의 보수", "-5의 2의 보수"처럼 음수가 나오면 → 부호 있는 수 체계이므로 맨 앞 비트 = 부호 비트(0=양수, 1=음수)로 해석하는 게 맞아요.
- "n비트로 표현할 수 있는 범위"를 묻고, 선택지에 음수 구간(예: -8~7)이 있으면 → 부호 있는 수를 가정한 거라 부호 비트 개념이 들어가 있어요.
- "최상위 비트", "MSB(엠에스비)", "부호 비트", "사인 비트"라는 말이 지문이나 선택지에 있으면 → 당연히 부호 비트 기준으로 풀면 돼요.
- 부호 비트를 굳이 강조하지 않아도 되는 경우
- 문제에 "부호 없는 수", "unsigned(언사인드)"만 나오고, 음수나 범위를 안 묻으면 → 맨 앞 비트도 그냥 숫자 자리로만 보면 돼요. (예: 8비트 부호 없음 → 0~255)
- "2의 보수를 구하라"만 있고, 문맥상 양수에 대한 2의 보수(비트 반전+1)만 구하면 되는 경우 → 계산 절차만 맞추면 되고, "이 결과를 음수로 쓸 때 맨 앞이 부호 비트"라고만 생각해 두면 돼요.
한 줄 요약: 문제에 음수, 부호 있는/signed, 범위(음수 포함), 최상위 비트·MSB·부호 비트·사인 비트 중 하나라도 나오면 → "맨 앞 한 비트 = 부호 비트"로 보고 풀면 돼요.
보수(補數) — 시험 단골
컴퓨터에서 음수를 표현하거나 뺄셈을 할 때 "보수"를 씁니다. 어떤 수에 더했을 때 자릿수가 한 단계 올라가게 만드는 수예요. 부호 있는 수에서 음수는 보통 2의 보수로 저장해요.
1의 보수
2진수에서 0은 1로, 1은 0으로 바꾼 거예요. "비트 반전"이라고 해요.
예: 0011 (3)의 1의 보수 → 1100. 0011 + 1100 = 1111 (4비트에서 모두 1)
2의 보수
1의 보수에 1을 더한 값이에요. 컴퓨터는 보통 2의 보수로 음수를 표현해요.
예: 0011 (3)의 2의 보수 → 1100 + 1 = 1101. 이 1101을 "-3"으로 씁니다. 0011 + 1101 = 10000 → 4비트만 쓰면 0000이 되니까 3 + (-3) = 0이에요.
여기서 1101의 맨 앞이 1이죠? 부호 있는 수일 때는 그게 부호 비트라서 "1 = 음수"라고 보는 거예요. 2의 보수로 만든 음수는 항상 맨 앞 비트가 1이에요.
시험 예: "8비트에서 -5의 2의 보수 표현" → 5 = 0000 0101 → 1의 보수 1111 1010 → 2의 보수 1111 1010 + 1 = 1111 1011. 맨 앞 1이 부호 비트(음수)예요.
문제 및 해설
정답: 1111 1101
풀이 단계
- ① 양수 3을 8비트 2진수로 씁니다. 3 = 11₂이므로 앞을 0으로 채워 8자리로 → 0000 0011.
- ② 1의 보수: 0은 1로, 1은 0으로 바꿉니다. → 1111 1100.
- ③ 2의 보수: ② 결과에 1을 더합니다. 1111 1100 + 1 = 1111 1101. 이게 -3의 2의 보수 표현입니다.
왜 맨 앞이 1인가요? 부호 있는 수에서 맨 앞 비트는 부호 비트예요. 0이면 양수, 1이면 음수. 2의 보수로 만든 음수는 항상 맨 앞이 1이 됩니다.
한 줄 요약 양수 2진수 → 1의 보수(0↔1) → 2의 보수(+1). 결과의 맨 앞 1 = 부호 비트(음수).
문제 및 답 확인
아래 빈칸에 -5의 2의 보수를 구하는 과정을 한 단계씩 채워 보세요. ① 5를 8비트 2진수로 쓰고, ② 0과 1을 바꾼 1의 보수, ③ 그다음 1을 더한 2의 보수를 순서대로 입력한 뒤 [확인]을 누르세요.
① 5를 8비트 2진수로 → ② 1의 보수(0↔1) → ③ 2의 보수(②+1) 순서로 입력하세요.
도전과제
풀어 본 뒤 정답을 펼쳐 확인하세요.
정답 보기
정답: 11111101
3 = 00000011 → 1의 보수 11111100 → 2의 보수(+1) 11111101. 맨 앞 1은 부호 비트(음수). 게임에서 "데미지 -3"을 메모리나 패킷에 저장할 때 이런 비트열로 쓸 수 있어요.
정답 보기
정답: -128
2의 보수에서 10000000은 "가장 큰 음수"로, 10진수 -128이에요. 8비트 부호 있는 정수 범위는 -128 ~ 127. 게임에서 HP·스탯이 8비트로 저장되면 이 범위 안의 값만 쓸 수 있어요.
문제 및 실습
진법 변환과 보수 빈칸 채우기를 더 해 보세요.
성능·빅오는 5. 성능과 빅오, 리스트(append·pop) 실습은 6. 자료구조와 리스트에서 해요.
문자 인코딩
글자도 숫자로 바꿔서 저장해요. 그 규칙이 인코딩이에요.
- ASCII(아스키): 영문·숫자·기호 128개(7비트). 'A' = 65 등.
- 유니코드(Unicode, 유니코드): 전 세계 문자를 번호로 매긴 표. 한글, 이모지 포함.
- UTF-8(유티에프에이트): 유니코드를 1~4바이트로 저장하는 방식. 웹·파일에서 많이 씀.