게시판
검색 결과: 21
1. num1의 비트를 왼쪽으로 3번 이동한 값으로 flag의 비트 켜기
2. num2의 비트를 오른쪽으로 2번 이동한 값으로 flag의 비트 끄기
3. flag의 첫 번째 비트 토글하기
문제를 보면
1번에서 flag의 값이 바뀌고
다시 2번에서 flag의 값이 바뀌고
다시 3번에서 flag의 값이 바뀝니다.
그래서 최종적으로 바뀐 flag의 값이 예시에서 136이 되는 겁니다.
처음 입력된 상태에서 flag 값이 바뀌지 않은 상태라면 질문한 144가 되는 게 맞습니다.
토글에서 오류가 발생해서... 못 넘어가고 있습니다
flag ^= 1<<7;
을 실행 시 결과값이 144가 나옵니다.
손으로 풀어봐도 flag ^= 1 << 7; 은 144가 나오는데...
0001 0000 ^ 1000 0000 수행 시 1001 0000 이 나오니
답이 144로 출력되는 것이 맞지 않나요?ㅜㅜ
unsined char는 1바이트죠.
1바이트는 8비트 8비트에서 첫번째 비트를 키면 값이 뭘까요?
1000 0000 입니다. 128이죠
255는 1111 1111입니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
unsigned char flag = 16;
unsigned char num1, num2;
scanf_s("%hhu %hhu", &num1, &num2);
flag |= num1 << 3;
flag &= ~(num2 >> 2);
flag ^= 255;
printf("%u\n", flag);
return 0;
}
제가 문제를 잘못 이해한 것 같아요. 분명 제가 생각하는 값은 나오는데 왜 답이 136이 나와야 하는지 모르겠습니다.
위 아래 코드 모두
결과값은 맞는데
통과가 안됩니다
혹시 제가 잘못알고있는 부분에 대해서 알려주실 수 있으시다면 감사하겠습니다
문의한 코드는 삭제합니다.
(도장_ 관리자님이 수정함 - 원문 제출일: 2020년 10월 12일, 월요일, 오후 11:56)