C 언어 기초

uint8_t r = 0x5A;
r |= 0x01;
r &= ~0x10;
r ^= 0x0F;
printf("0x%02X\n", r);

uint8_t는 8비트의 부호 없는 정수형이다. 위의 코드를 실행했을 때의 출력으로 올바른 것은?

  1. A0x44
  2. B0x4F
  3. C0x54
정답과 해설 보기

정답: A. 0x44

0x5A는 2진수로 0101 1010입니다. |= 0x01로 비트 0을 1로 만들어 0101 1011(0x5B), &= ~0x10으로 비트 4를 0으로 만들어 0100 1011(0x4B)이 됩니다. 마지막 ^= 0x0F는 하위 4비트를 반전하므로 0100 0100, 즉 0x44가 됩니다. |는 비트를 1로 만들고, &와 ~의 조합은 비트를 0으로 만들며, ^는 비트를 반전한다는 식으로 구분해서 사용합니다.

이 분야 연습하기 분야로 돌아가기

C 언어 기초의 다른 문제

  1. uint8_t는 8비트의 부호 없는 정수형이다. x를 10번 증가시키는 위의 코드를 실행했을 때의 출력으로 올바른 것은?
  2. unsigned char는 8비트, int는 32비트로 한다. 위의 코드를 실행했을 때의 출력으로 올바른 것은?
  3. uint8_t는 8비트의 부호 없는 정수형, int는 32비트로 한다. 위의 코드를 실행했을 때의 결과로 올바른 것은?
  4. int와 unsigned int는 32비트로 한다. 위의 코드를 실행했을 때의 결과로 올바른 것은?
  5. unsigned int는 32비트로 한다. 위의 코드를 실행했을 때의 동작으로 올바른 것은?