| 제목 | 답변완료 비트연산자와 조건연산자 의미 질문 | ||
|---|---|---|---|
| 질문유형 | 강좌내용 | 교수님 | 장윤경 |
| 과목 | 프로그래밍(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입니다.
조건식 판별: 2는 0이 아니므로 참(True)입니다. 따라서 물음표(?) 뒤의 값인 1이 출력됩니다.
3. (room & 64) ? 1 : 0 의 경우 (7번 방 확인)
비트 연산: 01000010 (room) & 01000000 (64) = 01000000
결과 값: 연산 결과는 10진수로 64입니다.
조건식 판별: 64 역시 0이 아니므로 참(True)입니다. 따라서 1이 출력됩니다.
- 2026-06-09























