비트 연산자
선수학습(2개)
요약
비트 연산자(AND, OR, XOR, NOT, 시프트)를 알아봅니다. 정보처리기사 실기에 자주 출제되는 비트 연산 문제를 풀기 위한 핵심 개념을 정리합니다.
비트란?
비트(bit)는 컴퓨터가 다루는 가장 작은 데이터 단위로, 0 또는 1 값만 가집니다.
모든 숫자는 컴퓨터 내부에서 비트의 조합(이진수)으로 저장됩니다. 실기 시험에서는 16진수(0xA5 등)로 표기된 값을 2진수로 변환해서 계산하는 문제가 자주 출제됩니다.
비트 연산자는 이 비트들을 직접 조작하는 연산자입니다.
비트 연산자 핵심 정리
| 연산자 | 이름 | 설명 | 예시 |
|---|---|---|---|
& | AND | 둘 다 1이면 1 | 5 & 3 = 1 |
| | OR | 하나라도 1이면 1 | 5 | 3 = 7 |
^ | XOR | 서로 다르면 1 | 5 ^ 3 = 6 |
~ | NOT | 비트 반전 | ~5 = -6 |
<< | 왼쪽 시프트 | 비트를 왼쪽으로 이동 | 5 << 1 = 10 |
>> | 오른쪽 시프트 | 비트를 오른쪽으로 이동 | 5 >> 1 = 2 |
XOR 연산자 (^)
XOR(배타적 논리합) 연산은 두 비트가 서로 다를 때 1을 반환합니다.
| A | B | A ^ B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
XOR 계산 예시
계산 과정:

AND 연산자 (&)
AND 연산은 두 비트가 모두 1일 때만 1을 반환합니다.
| A | B | A & B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
OR 연산자 (|)
OR 연산은 두 비트 중 하나라도 1이면 1을 반환합니다.
| A | B | A | B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
NOT 연산자 (~)
NOT 연산은 모든 비트를 반전시킵니다. 0은 1로, 1은 0으로 바뀝니다.
unsigned char는 음수 없이 0 ~ 255 범위만 저장하는 1바이트(8비트) 타입입니다.
C언어 코드에서는 정수를 보통 int로 다룹니다. int는 부호가 있는 32비트 타입이라 ~로 반전된 비트가 음수로 해석되고, 그래서 ~5의 결과는 -6이 됩니다. 핵심 정리 표의 ~5 = -6이 바로 이 경우입니다.
int에서 ~ 결과 구하기: ~x = -x - 1
~x = -x - 1 공식과 원리 보기
int 같은 부호 있는 정수에서는 비트를 하나하나 뒤집지 않아도 다음 공식으로 결과를 바로 구할 수 있습니다.
~x = -x - 1(부호를 바꾼 뒤 1을 뺍니다)
| 식 | 계산 | 결과 |
|---|---|---|
~5 | -5 - 1 | -6 |
~(-6) | 6 - 1 | 5 |
~0 | 0 - 1 | -1 |
음수에 ~를 적용해도 같은 공식이 통합니다. ~(-6)은 -(-6) - 1 = 6 - 1 = 5입니다. 그래서 연산자 우선순위의 ~~b 예시처럼 ~를 두 번 하면 5 → -6 → 5로 원래 값으로 돌아옵니다.
왜 -x - 1이 될까?
int는 32비트이므로 5를 반전하면 앞쪽 0들까지 모두 1로 바뀝니다.
int 같은 부호 있는 타입은 맨 앞 비트로 부호를 정합니다. 0이면 양수, 1이면 음수입니다. ~5는 맨 앞 비트가 1이 되었으므로 음수입니다. 같은 반전이라도 앞에서 본 unsigned char는 부호 비트가 없어서 1111 1010이 그대로 250으로 읽힙니다. 즉 비트가 같아도 타입에 따라 값이 달라집니다.
맨 앞 비트가 1인 음수는 다음 3단계로 10진수 값을 읽습니다.
- 비트를 모두 반전합니다.
- 1을 더합니다.
- 나온 값 앞에
-를 붙입니다.
~5에 적용하면 다음과 같습니다.
여기서 공식이 나옵니다. ~x를 ① 반전하면 원래 값 x로 돌아오고, ② 1을 더하면 x + 1, ③ -를 붙이면 -(x + 1)입니다. 즉 ~x = -(x + 1) = -x - 1입니다.
시프트 연산자
왼쪽 시프트
비트를 왼쪽으로 이동시키고 빈 자리는 0으로 채웁니다.
오른쪽 시프트
비트를 오른쪽으로 이동시킵니다.
시프트 연산자는 비트 AND/OR 연산자보다 우선순위가 높습니다.
a & b >> 1은a & (b >> 1)로 계산됩니다.
비트 연산자 핵심 정리
| 연산자 | 이름 | 설명 | 예시 (boolean) |
|---|---|---|---|
& | AND | 둘 다 true면 true | true & false = false |
| | OR | 하나라도 true면 true | true | false = true |
^ | XOR | 서로 다르면 true | true ^ false = true |
! | NOT | 반대로 뒤집기 | !true = false |
비트 연산자란?
비트 연산자는 원래 숫자의 비트(0과 1)를 직접 조작하는 연산자입니다. 하지만 Java에서는 boolean 값(true/false)에도 사용할 수 있습니다.
정보처리기사 실기에서 Java 비트 연산자 문제는 주로 boolean(true/false) 값에 비트 연산자를 사용하는 형태로 출제됩니다.
AND 연산자 (&)
AND 연산은 둘 다 true일 때만 true를 반환합니다.
| A | B | A & B |
|---|---|---|
| false | false | false |
| false | true | false |
| true | false | false |
| true | true | true |
AND: 비교 연산자와 함께 사용
a == 3은 true, b == 4도 true이므로 true & true = true입니다.
OR 연산자 (|)
OR 연산은 둘 중 하나라도 true면 true를 반환합니다.
| A | B | A | B |
|---|---|---|
| false | false | false |
| false | true | true |
| true | false | true |
| true | true | true |
OR: 비교 연산자와 함께 사용
a == 2는 false지만, a == c가 true이므로 false | true = true입니다.
XOR 연산자 (^)
XOR(배타적 논리합) 연산은 두 값이 서로 다를 때 true를 반환합니다.
| A | B | A ^ B |
|---|---|---|
| false | false | false |
| false | true | true |
| true | false | true |
| true | true | false |

XOR: 비교 연산자와 함께 사용
1 == b는 false, c != d는 true이므로 false ^ true = true (서로 다르므로)입니다.
NOT 연산자 (!)
NOT 연산은 boolean 값을 반대로 뒤집습니다.
| A | !A |
|---|---|
| true | false |
| false | true |
NOT: 비교 연산자와 함께 사용
c > d는 3 > 5이므로 false입니다. NOT 연산으로 뒤집으면 true가 됩니다.
시프트 연산자
시프트 연산자는 숫자의 비트를 왼쪽 또는 오른쪽으로 이동시킵니다. Java에서도 C언어와 동일하게 <<와 >>를 사용합니다.
왼쪽 시프트 (<<)
비트를 왼쪽으로 이동시키고 빈 자리는 0으로 채웁니다.
오른쪽 시프트 (>>)
비트를 오른쪽으로 이동시킵니다.
| 시프트 | 의미 | 계산 |
|---|---|---|
a << 1 | a x 2 | 2를 곱하기 |
a << 2 | a x 4 | 4를 곱하기 |
a >> 1 | a / 2 | 2로 나누기 |
a >> 2 | a / 4 | 4로 나누기 |
비트 연산자 핵심 정리
| 연산자 | 종류 | 설명 | 예시 | 결과 |
|---|---|---|---|---|
>> | 비트 오른쪽 시프트 | 비트를 오른쪽으로 n칸 이동 (n칸당 ÷2) | 100 >> 1 | 50 |
<< | 비트 왼쪽 시프트 | 비트를 왼쪽으로 n칸 이동 (n칸당 ×2) | 100 << 1 | 200 |
& | AND | 둘 다 1이면 1 | 5 & 3 | 1 |
| | OR | 하나라도 1이면 1 | 5 | 3 | 7 |
^ | XOR | 서로 다르면 1 | 5 ^ 3 | 6 |
비트 시프트 연산자
비트 시프트 연산자는 숫자의 비트를 왼쪽 또는 오른쪽으로 이동시킵니다.
오른쪽 시프트 (>>)
비트를 오른쪽으로 이동시키고 빈 자리는 0으로 채웁니다.
이진수로 확인:
왼쪽 시프트 (<<)
비트를 왼쪽으로 이동시키고 빈 자리는 0으로 채웁니다.
| 시프트 | 의미 | 계산 |
|---|---|---|
a >> 1 | a / 2 | 2로 나누기 |
a >> 2 | a / 4 | 4로 나누기 |
a << 1 | a × 2 | 2를 곱하기 |
a << 2 | a × 4 | 4를 곱하기 |
AND 연산자 (&)
AND 연산은 두 비트가 모두 1일 때만 1을 반환합니다.
| A | B | A & B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
OR 연산자 (|)
OR 연산은 두 비트 중 하나라도 1이면 1을 반환합니다.
| A | B | A | B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
XOR 연산자 (^)
XOR(배타적 논리합) 연산은 두 비트가 서로 다를 때 1을 반환합니다.
| A | B | A ^ B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |