AP 과목 A 핵심 1: 2진수, 2의 보수와 비트 연산
응용정보기술자시험 과목 A에 필요한 진법 변환, 2의 보수, 오버플로, 비트 마스크와 시프트를 기출문제와 진단문제로 익힙니다.
AP 과목 A 제1편 · 2026년도·실라버스 Ver.7.2 기준의 독립 학습 자료입니다. IPA와 제휴하지 않으며 합격을 보장하지 않습니다. 시리즈 허브 보기
이 단원에서는 비트열을 보고 곧바로 값을 단정하지 않는 습관부터 만든다. 진법 변환, 2의 보수(2の補数), 오버플로(オーバフロー), 마스크와 시프트를 한 흐름으로 이해하면 표현만 바뀐 문제에도 대응할 수 있다. 2026년 시험의 명칭은 과목 A(科目A)이며, 아래 공식 기출은 당시 명칭인 오전(午前) 문제로 표시한다. 과목 A에 합격하는 것만으로 AP 시험 전체에 합격하는 것은 아니다.
학습 목표
- 비트 폭, 부호 유무, 값과 비트 패턴을 구별한다.
- 2진수·16진수·2진 소수를 변환하고 표현 범위를 계산한다.
- 2의 보수로 음수를 만들고 복원한다.
- 캐리와 부호 있는 오버플로를 구별한다.
- AND·OR·XOR·NOT 마스크와 논리·산술 시프트를 정확히 적용한다.
첫 번째 규칙: 세 가지를 먼저 확인한다
계산 전에 다음을 확인한다.
- 비트 폭은 몇 비트인가?
- 부호 있는 수인가, 부호 없는 수인가?
- 대상은 수학적 값인가, 저장된 비트 패턴인가?
예를 들어 같은 8비트 패턴 11110000도 부호 없는 정수라면 128+64+32+16=240이다. 부호 있는 2의 보수 정수라면 240-256=-16이다. 문맥 없이 비트열만 보고 값을 정할 수 없다.
2진수, 16진수와 소수
각 자리의 가중치를 더하면 된다.
00101101₂ = 32+8+4+1 = 45- 2진수 네 자리씩 묶으면
1010 1101₂ = AD₁₆이다.1010₂=A₁₆,1101₂=D₁₆이다. - 소수점 아래의 가중치는
2^-1, 2^-2, 2^-3, ...이다. 따라서0.101₂ = 1/2+1/8 = 0.625이다. 10.101₂ = 2+1/2+1/8 = 2.625이다.
10진 유한소수가 2진수에서도 반드시 유한한 것은 아니다. 예를 들어 0.1은 10진수에서는 유한하지만 2진수로는 순환하므로, 제한된 비트 수로 저장하면 근삿값이 된다.
표현 범위와 2의 보수
n비트에서 범위는 다음과 같다.
- 부호 없음:
0..2^n-1 - 2의 보수:
-2^(n-1)..2^(n-1)-1
따라서 부호 있는 8비트 범위는 -128..127이다. 양수 쪽이 하나 적기 때문에 -128의 부호를 같은 8비트 형식에서 반전한 +128은 표현할 수 없다.
-13을 만드는 법
8비트 +13에서 시작한다.
00001101 (+13)
11110010 (비트 반전)
11110011 (+1 → -13)
역으로 확인할 때 11110011을 부호 없는 값으로 읽으면 243이고, 243-256=-13이다. 반전만 한 11110010은 242이므로 242-256=-14이다. 즉, 반전만으로는 부족하고 1을 더해야 한다.
캐리와 부호 있는 오버플로는 다르다
캐리(carry)는 고정 비트 폭 밖으로 나간 비트이고, 부호 있는 오버플로는 계산의 참값이 해당 부호 있는 범위를 벗어난 상태다.
127+1은 8비트로01111111+00000001 = 10000000이다. 저장된 패턴을 부호 있게 읽으면-128이므로 부호 있는 오버플로다.-1+1은11111111+00000001 = 1 00000000이다. 8비트 저장값은00000000, 즉 0이다. 캐리는 있지만 부호 있는 오버플로는 없다.
2의 보수 덧셈에서는 같은 부호의 두 입력을 더했는데 결과 부호가 반대가 되면 부호 있는 오버플로다. 서로 다른 부호끼리의 덧셈은 결과가 두 피연산자 사이에 있으므로 부호 있는 오버플로가 일어나지 않는다.
비트 마스크
마스크는 원하는 비트를 남기거나, 세우거나, 뒤집는 패턴이다. 10110110의 하위 4비트를 대상으로 하면 다음과 같다.
10110110 AND 00001111 = 00000110 # 하위 4비트만 유지
10110110 OR 00001111 = 10111111 # 하위 4비트를 1로 설정
10110110 XOR 00001111 = 10111001 # 하위 4비트를 반전
NOT은 모든 비트를 반전하므로 폭을 반드시 밝혀야 한다. 예를 들어 8비트 NOT 00001101은 11110010이지만, 16비트 NOT이라면 1111111111110010이다.
논리 시프트와 산술 시프트
오른쪽 시프트에서는 새로 들어오는 비트를 구별해야 한다.
- 8비트
11110000을 논리 오른쪽 시프트 2회:00111100= 60 - 같은 패턴을 부호 있는 8비트로 보고 산술 오른쪽 시프트 2회:
11111100= -4
여기서 산술 오른쪽 시프트는 2의 보수 표현에서 최상위 부호 비트를 복제한다고 가정했다. 음수의 산술 오른쪽 시프트와 정수 나눗셈은 언어의 규칙과 반올림 방향에 따라 결과가 다를 수 있으므로, 문제나 언어 사양을 확인해야 한다.
왼쪽 시프트도 무조건 “×2”라고 외우면 위험하다. 일반적인 고정 폭 전체 비트 패턴 왼쪽 시프트에서는 빠져나간 상위 비트를 버리고 오른쪽에 0을 넣는다. 부호 있는 8비트에서 50(00110010)을 한 번 옮기면 100(01100100)으로 표현 가능하다. 그러나 100(01100100)을 한 번 옮기면 11001000이 되고, 이를 부호 있는 8비트로 읽으면 200-256=-56이다. 수학적 값 200은 범위를 벗어났기 때문이다.
일본 시험 문제에는 算術左シフト를 부호 비트는 보존하고 나머지 비트만 왼쪽으로 이동하는 문제 고유의 연산으로 정의하는 경우가 있다. 이는 위의 전체 비트 패턴 시프트나 프로그래밍 언어의 왼쪽 시프트와 같다고 단정할 수 없다. 항상 그 문제에 제시된 정의를 따른다.
공식 기출문제로 확인하기
다음은 IPA 공개 문제를 한국어로 번역하고 형식을 조정한 것이다. 원문은 2021년도 가을기 응용정보기술자시험의 당시 오전 문항이다.
연산 레지스터가 16비트인 CPU에서 부호 있는 16비트 정수
x1,x2를 16비트 부호 있는 덧셈(x1+x2)할 때, 모든x1,x2의 조합에서 덧셈 결과가 오버플로하지 않는 것은 어느 것인가? 여기서|x|는x의 절댓값이며, 음수는 2의 보수로 표현한다.ア
|x1|+|x2|≤32,768인 경우イ
|x1|및|x2|가 모두 32,767 미만인 경우ウ
x1×x2>0인 경우エ
x1과x2의 부호가 다른 경우
出典:令和3年度 秋期 応用情報技術者試験 午前 問8
정답: エ
- ア: 오답.
32,767+1=32,768은 조건|x1|+|x2|≤32,768을 만족하지만, 부호 있는 16비트의 최댓값 32,767을 넘는다. - イ: 오답.
32,766+32,766=65,532는 두 절댓값이 모두 32,767 미만이지만 범위를 넘는다. - ウ: 오답. 곱이 양수이면 두 수의 부호가 같다. 같은 부호의 덧셈에서 바로 오버플로가 가능하며, 예를 들어
20,000+20,000=40,000은 범위를 넘는다. - エ: 정답. 부호가 다른 두 수의 합은 두 피연산자 사이에 놓인다. 각 피연산자가 이미
-32,768..32,767안에 있으므로 합도 그 범위를 벗어나지 않는다.
자체 진단 문제 5개
아래 문항은 학습 확인을 위해 만든 오리지널 문제이며 IPA 기출문제가 아니다. 먼저 답을 고른 뒤 모든 선택지의 설명까지 확인하자.
1. 0.101₂의 값은?
ア 0.5 / イ 0.625 / ウ 0.75 / エ 1.25
정답: イ. 1/2+0/4+1/8=0.625이다.
- ア: 마지막
1, 즉1/8을 빠뜨린 값이다. - イ: 각 자리의 가중치를 정확히 더한 값이다.
- ウ:
0.11₂ = 1/2+1/4 = 0.75와 혼동한 값이다. - エ: 소수점 아래 자리값을 잘못 적용한 값이다.
2. -13의 8비트 2의 보수 표현은?
ア 00001101 / イ 11110010 / ウ 11110011 / エ 10001101
정답: ウ. 00001101을 반전한 뒤 1을 더하면 11110011이다.
- ア:
+13이다. - イ: 반전 후 1을 더하지 않은 패턴이며
242-256=-14다. - ウ:
243-256=-13인 올바른 패턴이다. - エ: 부호와 크기 표현을 혼동한 패턴이다. 2의 보수로는
141-256=-115다.
3. 10110110의 하위 4비트만 남기는 연산은?
ア AND 00001111 / イ OR 00001111 / ウ XOR 00001111 / エ AND 11110000
정답: ア. 상위 4비트를 0으로 지우고 하위 4비트를 그대로 둔다.
- ア: 결과는
00000110으로, 하위 4비트만 남는다. - イ: 결과는
10111111로, 하위 4비트를 모두 1로 만든다. - ウ: 결과는
10111001로, 하위 4비트를 뒤집는다. - エ: 결과는
10110000으로, 반대로 상위 4비트만 남긴다.
4. 부호 있는 8비트 11110000을 산술 오른쪽 시프트 2회 한 결과는?
ア 00111100 / イ 11111100 / ウ 11000000 / エ 11111000
정답: イ. 부호 비트 1을 두 번 채우면 11111100이며 값은 -4다.
- ア: 0을 채운 논리 오른쪽 시프트 2회의 결과다.
- イ: 부호 비트를 복제한 올바른 결과다.
- ウ: 8비트 전체 패턴을 왼쪽으로 2회 시프트한 결과다.
- エ: 산술 오른쪽 시프트를 1회만 한 결과다.
5. 부호 있는 8비트 덧셈에서 오버플로하는 것은?
ア -1+1 / イ 60+60 / ウ 100+40 / エ -64+(-64)
정답: ウ. 100+40=140은 최댓값 127을 넘는다. 저장 패턴은 10001100이고, 부호 있게 읽으면 140-256=-116이 된다.
- ア: 결과 0은 범위 안이다. 캐리는 생기지만 부호 있는 오버플로는 없다.
- イ: 결과 120은 범위 안이다.
- ウ: 수학적 결과 140이 범위를 벗어나므로 오버플로다.
- エ: 결과 -128은 부호 있는 8비트의 최솟값으로 표현 가능하다.
자주 하는 실수
- 비트 폭과 부호 유무를 확인하기 전에 값을 정한다.
- 2의 보수를 만들 때 비트 반전만 하고
+1을 잊는다. - 최상위 자리에서 캐리가 나오면 언제나 부호 있는 오버플로라고 생각한다.
- 오른쪽 시프트에서 0을 채우는지 부호 비트를 채우는지 확인하지 않는다.
- 고정 폭 왼쪽 시프트를 조건 없이 ×2라고 판단한다.
- 문제에서 별도로 정의한
算術左シフト를 언어의 시프트 규칙과 섞는다.
짧은 정리와 복습 계획
비트열의 값은 폭·부호·해석 방식이 정한다. 2의 보수 음수는 반전 후 1을 더하고, 부호 있는 오버플로는 캐리와 별도로 판단한다. 마스크는 AND로 유지, OR로 설정, XOR로 반전하며, 시프트는 빈자리를 채우는 규칙과 고정 폭의 범위를 함께 본다.
학습 내용은 당일 → 다음 날 → 3일 뒤 → 7일 뒤에 간격을 두고 복습하자. 이는 이 시리즈의 게시 주기와는 별개인 개인 복습 간격이다. AP 과목 A 시리즈 허브에서 전체 흐름을 확인할 수 있다. 다음 핵심 글의 주제는 논리와 집합이며, 공개 전 문서에는 링크하지 않는다.