본문 바로가기

스터디/코딩

[ 코딩 도장 : C ] Unit 24. 비트 연산자 응용하기 : 연습문제 / 심사문제

24.6 연습문제 : 시프트 연산과 플그 활용하기

문제) 다음 소스 코드를 완성하여 4 0이 출력되게 만드세요

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    unsigned char flag1 = 1 << 7;
    unsigned char flag2 = 1 << 3;

    flag1 |= 1 << 2;
    flag1 &= ~(1 << 7);
    flag2 ^= 1 << 3;

    printf("%u %u\n", flag1, flag2);

    return 0;
}

 

 

24.7 심사문제 : 시프트 연산과 플래그 활용하기

문제) 표준 입력으로 두 정수가 입력됩니다(입력 값의 범위는 0~255). 플래그에 다음과 같은 연산을 하여 결과가 출력되게 만드세요. 정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.

  1. num1의 비트를 왼쪽으로 3번 이동한 값으로 flag의 비트 켜기
  2. num2의 비트를 오른쪽으로 2번 이동한 값으로 flag의 비트 끄기
  3. flag의 첫 번째 비트 토글하기
#define __USE_MINGW_ANSI_STDIO 1 // Dev-C++(MinGW)에서 %hhu를 사용하기 위한 설정
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    unsigned char flag = 16;
    unsigned char num1, num2;

    scanf("%hhu %hhu", &num1, &num2);

    flag |= num1 << 3;
    flag &= ~(num2 >> 2);
    flag ^= 128;

    printf("%u\n", flag);

    return 0;
}