본문 바로 가기

로고

  • 회원가입
  • 로그인
통합검색

이전 페이지 가기 공학계열 장윤경 교수님

답변완료 비트연산자와 조건연산자 의미 질문
  • 작성자 주*수 (j********6)
  • 작성일 2026-03-08
  • 과목 프로그래밍(C언어)
질문유형
강좌내용
강좌
[프로그래밍(C언어)] 실습으로 이해하는 프로그래밍 첫걸음 : C언어
교수님 안녕하세요
교수님 설명 덕분에 C언어를 쉽게 이해하고 있습니다.

11강 수업 내용 중 궁금한 것이 있어 질문 남깁니다.
비트연산자 실습 문제 중 다음의 코딩내용에 대해,




#include <stdio.h>

int main() {
    char room = 0;
    printf("2번 방과 7번 방의 불을 ON하세요.\n");

    room = room | 2;
    room |= 64;
   // room = room | 64;
    
    printf("1번 방의 불이 켜져있는 것은 %d입니다.\n",(room  & 1) ? 1: 0 );
    printf("2번 방의 불이 켜져있는 것은 %d입니다.\n", (room & 2) ? 1 : 0);
    printf("3번 방의 불이 켜져있는 것은 %d입니다.\n", (room & 4) ? 1 : 0);
    printf("4번 방의 불이 켜져있는 것은 %d입니다.\n", (room & 8) ? 1 : 0);
    printf("5번 방의 불이 켜져있는 것은 %d입니다.\n", (room & 16) ? 1 : 0);
    printf("6번 방의 불이 켜져있는 것은 %d입니다.\n", (room & 32) ? 1 : 0);
    printf("7번 방의 불이 켜져있는 것은 %d입니다.\n", (room & 64) ? 1 : 0);
    printf("8번 방의 불이 켜져있는 것은 %d입니다.\n", (room & 128) ? 1 : 0);

        return 0;
}




조건연산자의 경우, 
A? B: C에 대해 
A가 참일 때 B를 실행(출력)하고, A가 거짓일때 C를 실행(출력)한다고 할 때,
위 코딩에서 (room  & 1) ? 1: 0에 대해 A에 해당하는 (room  & 1)의 참 거짓은 어떻게 판별하는 것인가요?

제가 추측하기에는 (room  & 1)의 경우 8비트가 00000000로 이루어져 0을 의미하므로 컴퓨터는 0을 거짓으로 받아들여 C에 해당하는 0을 출력한 것이고,
(room  & 2)의 경우 8비트가 00000010로 이루어져 2를 의미하므로 컴퓨터는 0이외의 숫자는 참으로 받아들여 B에 해당하는 1을 출력한 것이며,
(room  & 64)의 경우 8비트가 01000000로 이루어져 64를 의미하므로 마찬가지로 컴퓨터는 0이외의 숫자는 참으로 받아들여 B에 해당하는 1을 출력한 것이라고 생각했습니다.

제가 생각한 논리가 맞는 것인지 궁금합니다.

끝으로 좋은 수업 제공해주셔서 감사합니다.

※ 답변 완료된 질문과 답변은 수정 및 삭제가 불가합니다.

댓글 0

    • 장*경
    • 교수님

    room 변수는 현재 2번 방(2)7번 방(64)이 켜져 있으므로, 2진수로 01000010 상태입니다.

    1. (room & 1) ? 1 : 0 의 경우 (1번 방 확인)

    비트 연산: 01000010 (room) & 00000001 (1) = 00000000

    결과 값: 연산 결과는 10진수로 0입니다.

    조건식 판별: C언어에서 0은 거짓(False)이므로, 콜론(:) 뒤의 값인 0이 출력됩니다.

    2. (room & 2) ? 1 : 0 의 경우 (2번 방 확인)

    비트 연산: 01000010 (room) & 00000010 (2) = 00000010

    결과 값: 연산 결과는 10진수로 2입니다.

    조건식 판별: 20이 아니므로 참(True)입니다. 따라서 물음표(?) 뒤의 값인 1이 출력됩니다.

    3. (room & 64) ? 1 : 0 의 경우 (7번 방 확인)

    비트 연산: 01000010 (room) & 01000000 (64) = 01000000

    결과 값: 연산 결과는 10진수로 64입니다.

    조건식 판별: 64 역시 0이 아니므로 참(True)입니다. 따라서 1이 출력됩니다.

    • 2026-06-09