본문 바로 가기

학습 Q&A

강의 내용 궁금증! 교수님이 직접 답변 드립니다

  • 홈
  • 교수소개
  • 공학계열
  • 장윤경 교수님
  • 학습 Q&A

ic_qna.png

강의 범위를 벗어난 질문은 답변이 어렵습니다.
비방, 욕설 등 게시판 성격과 무관한 내용은 사전 고지 없이 삭제됩니다.
답변 완료된 게시글은 수정 및 삭제 불가합니다.

jokjjs0216_03.png

게시판 글보기
제목 답변완료 비트연산자와 조건연산자 의미 질문
질문유형 강좌내용 교수님 장윤경
과목 프로그래밍(C언어) 강좌명 [프로그래밍(C언어)] 실습으로 이해하는 프로그래밍 첫걸음 : C언어
작성자 주*수 (j********6) 등록일 2026-03-08 23:24
교수님 안녕하세요
교수님 설명 덕분에 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