상세 컨텐츠

본문 제목

[CodeUp] C언어 기초 100제 풀이 (1056번 ~ 1060번)

C언어

by idea8590 2026. 2. 1. 22:20

본문

반응형

이번 1056번부터 1060번까지는 단순한 논리 연산을 조합하여 XOR(배타적 논리합)이나 NOR 같은 복합적인 논리 회로의 동작을 구현해 봅니다.

기존의 AND, OR, NOT 연산자를 섞어서 두 값이 다를 때만 참이 되거나, 둘 다 거짓일 때만 참이 되는 조건을 만들어 봅니다.

이후에는 논리 연산자(&&)가 아닌 비트 단위 연산자(&, ~)가 처음으로 등장합니다.

비트 단위(Bitwise) 연산은 정수를 2진수 비트열로 변환하여 각 자릿수마다 연산을 수행하므로 컴퓨터 구조를 이해하는 데 필수적입니다.

특히 비트 반전(NOT) 연산 시 부호가 있는 정수 표현 방식(2의 보수)에 의해 값이 어떻게 변하는지 주의 깊게 살펴보아야 합니다.


1056번 : 참/거짓이 서로 다를 때만 참 출력하기 (XOR)

두 정수(0 또는 1)가 입력되었을 때, 두 값이 서로 다르면 1(참), 같으면 0(거짓)을 출력합니다. 이를 XOR(Exclusive OR) 연산이라고 합니다.

C
 
#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를 사용해도 같은 결과를 얻을 수 있습니다.


1057번 : 참/거짓이 서로 같을 때만 참 출력하기 (XNOR)

두 정수(0 또는 1)가 입력되었을 때, 두 값이 서로 같으면 1(참), 다르면 0(거짓)을 출력합니다.

C
 
#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라고도 불리며, 프로그래밍적으로는 두 값이 같은지를 묻는 동등 연산자 ==와 의미가 같습니다.


1058번 : 둘 다 거짓일 경우만 참 출력하기 (NOR)

두 정수(0 또는 1)가 입력되었을 때, 두 값 모두 거짓(0)일 때만 1(참)을 출력합니다.

C
 
#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로 표현할 수 있습니다.


1059번 : 비트 단위로 NOT 하여 출력하기 (Bitwise NOT)

정수 1개를 입력받아 비트 단위로 반전(NOT) 시킨 값을 출력합니다. 이때부터는 논리 연산자 !가 아닌 **비트 연산자 ~**를 사용합니다.

C
 
#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)


1060번 : 비트 단위로 AND 하여 출력하기 (Bitwise AND)

두 정수를 입력받아 비트 단위로 AND 연산한 결과를 출력합니다.

C
 
#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이 됩니다.

  • 3 = 0011
  • 5 = 0101
  • 3 & 5 = 0001 (10진수로 1)

핵심 요약

  1. XOR(배타적 논리합)은 두 값이 서로 다를 때 참(1)을 반환합니다. (a && !b) || (!a && b)
  2. NOR는 OR의 반대로, 입력값이 모두 거짓(0)일 때만 참(1)을 반환합니다. !a && !b
  3. 비트 연산자 ~ (tilde)는 모든 비트를 반전시키며, 결과값은 -n - 1이 됩니다.
  4. 비트 연산자 &는 대응하는 비트가 모두 1일 때만 1이 되는 비트 단위 AND 연산을 수행합니다.
  5. 논리 연산자(&&, ||, !)는 참/거짓(1/0)을 다루고, 비트 연산자(&, |, ~)는 2진수 비트 자체를 다룹니다.
반응형

관련글 더보기