이번 1056번부터 1060번까지는 단순한 논리 연산을 조합하여 XOR(배타적 논리합)이나 NOR 같은 복합적인 논리 회로의 동작을 구현해 봅니다.
기존의 AND, OR, NOT 연산자를 섞어서 두 값이 다를 때만 참이 되거나, 둘 다 거짓일 때만 참이 되는 조건을 만들어 봅니다.
이후에는 논리 연산자(&&)가 아닌 비트 단위 연산자(&, ~)가 처음으로 등장합니다.
비트 단위(Bitwise) 연산은 정수를 2진수 비트열로 변환하여 각 자릿수마다 연산을 수행하므로 컴퓨터 구조를 이해하는 데 필수적입니다.
특히 비트 반전(NOT) 연산 시 부호가 있는 정수 표현 방식(2의 보수)에 의해 값이 어떻게 변하는지 주의 깊게 살펴보아야 합니다.
두 정수(0 또는 1)가 입력되었을 때, 두 값이 서로 다르면 1(참), 같으면 0(거짓)을 출력합니다. 이를 XOR(Exclusive OR) 연산이라고 합니다.
#include <stdio.h>
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("%d", (a && !b) || (!a && b));
return 0;
}
실행 결과
입력 예시: 1 0
출력 예시: 1
상세 설명
XOR 연산은 "두 값이 서로 다를 때만 참"인 연산입니다. 이를 기본 논리 연산자로 풀어서 쓰면 **(a가 참이고 b가 거짓) 이거나 (a가 거짓이고 b가 참)**인 경우입니다. 따라서 코드로는 (a && !b) || (!a && b)로 표현할 수 있습니다. 단순히 a != b를 사용해도 같은 결과를 얻을 수 있습니다.
두 정수(0 또는 1)가 입력되었을 때, 두 값이 서로 같으면 1(참), 다르면 0(거짓)을 출력합니다.
#include <stdio.h>
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("%d", (!a && !b) || (a && b));
return 0;
}
실행 결과
입력 예시: 0 0
출력 예시: 1
상세 설명
두 값이 같다는 것은 "둘 다 거짓이거나, 둘 다 참"인 경우를 말합니다. 수식으로는 (!a && !b) || (a && b)가 됩니다. 이는 XOR의 반대 개념이라 XNOR라고도 불리며, 프로그래밍적으로는 두 값이 같은지를 묻는 동등 연산자 ==와 의미가 같습니다.
두 정수(0 또는 1)가 입력되었을 때, 두 값 모두 거짓(0)일 때만 1(참)을 출력합니다.
#include <stdio.h>
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("%d", !a && !b);
return 0;
}
실행 결과
입력 예시: 0 0
출력 예시: 1
상세 설명
이 연산은 OR 연산의 결과를 뒤집은 것과 같아 NOR(Not OR)라고 부릅니다. "하나라도 참이면 참"인 OR(a || b)의 정반대이므로, "둘 다 거짓이어야 참"이 됩니다. 코드로는 !(a || b)로 작성하거나, 각각 부정하여 !a && !b로 표현할 수 있습니다.
정수 1개를 입력받아 비트 단위로 반전(NOT) 시킨 값을 출력합니다. 이때부터는 논리 연산자 !가 아닌 **비트 연산자 ~**를 사용합니다.
#include <stdio.h>
int main() {
int a;
scanf("%d", &a);
printf("%d", ~a);
return 0;
}
실행 결과
입력 예시: 2
출력 예시: -3
상세 설명
물결표(~)는 비트 단위 NOT 연산자입니다. 2진수로 표현된 모든 비트의 0을 1로, 1을 0으로 바꿉니다. 컴퓨터는 음수를 표현할 때 2의 보수 방식을 사용하므로, 양수 n의 비트를 전부 뒤집으면 값은 -n - 1이 됩니다. (예: ~2 → -3, ~0 → -1)
두 정수를 입력받아 비트 단위로 AND 연산한 결과를 출력합니다.
#include <stdio.h>
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("%d", a & b);
return 0;
}
실행 결과
입력 예시: 3 5
출력 예시: 1
상세 설명
앰퍼샌드(&) 하나만 쓰면 비트 단위 AND 연산자가 됩니다. 두 숫자를 2진수로 나란히 썼을 때, 같은 자릿수의 비트가 둘 다 1이어야만 결과가 1이 됩니다.
| [CodeUp] C언어 기초 100제 풀이 (1066번 ~ 1070번) (0) | 2026.02.03 |
|---|---|
| [CodeUp] C언어 기초 100제 풀이 (1061번 ~ 1065번) (0) | 2026.02.01 |
| [CodeUp] C언어 기초 100제 풀이 (1051번 ~ 1055번) (0) | 2026.02.01 |
| [CodeUp] C언어 기초 100제 풀이 (1046번 ~ 1050번) (0) | 2026.02.01 |
| [CodeUp] C언어 기초 100제 (1041~1045번) 풀이 (0) | 2026.02.01 |