2-3 강좌의 도전 과제 해답을 설명합니다.
1. 다음 코드에서 출력되는 값은 무엇입니까?
int n = 5;
std::cout << n++ << std::endl;
후위 증감 연산자는 그 줄 실행이 끝난 뒤에 값을 1 증가시키므로 출력값은 5 입니다.
2. 다음 코드는 경고가 발생합니다. 이를 해결하기 위한 연산자는 무엇입니까?
double d = 6.2458;
int su{d};
사실 그냥 아래와 같이 써도 동작하기는 합니다만, 제가 원하는 답은 이게 아닙니다
int su(d);
int su = d;
초기화는 반드시 중괄호를 사용하라고 말씀드렸죠? 아래가 제가 원한 정답이었습니다.
int su{static_cast<int>(d)};
static_cast<> 로 명시적 형 변환을 해 주어야 경고를 없앨 수 있습니다. 버그가 생길 확률도 줄겠죠.
3. 다음 코드는 오류가 발생합니다. 이유가 무엇인가요?
std::cout << true || false << std::endl;
error: invalid operands of types ‘bool’ and ‘’ to binary ‘operator<<’
std::cout << true || false << std::endl;
~~~~~~^~~~~~
답은 간단합니다. ||보다 <<의 우선순위가 더 높기 때문에 아래처럼 계산이 된 것입니다.
(std::cout << true) || (false << std::endl);
std::cout << true는 아무 문제 없지만 false << std::endl은 문제가 분명 있죠. 오류를 해결하려면 || 부분을 먼저 계산하게 하면 됩니다. 아래처럼 괄호를 씌워주세요.
std::cout << (true || false) << std::endl;
4. [고난이도] 비트 연산자를 사용하여 홀수와 짝수를 판별하시오.
int n;
std::cin >> n;
std::cout << (/* 이 부분에 알맞은 식은? */ ? "홀수" : "짝수");
비트를 잘 생각해보면, 마지막 비트는 1의 값을 가졌습니다. 그 외에 다른 비트는 모두 2, 4, 8, 16...으로 짝수의 값을 가지죠. 즉, 마지막 비트가 홀수/짝수를 결정합니다. 마지막 비트가 켜져있으면(=1이라면) 1의 값을 더 가지므로 홀수가 되고, 꺼져있으면(=0이라면) 짝수가 되죠.
n이 홀수라는 것은 n의 마지막 비트가 1이라는 뜻이고, 그 말은 n을 1과 & 연산을 하면 1이 나온다는 뜻이죠. 짝수라면 1이 안 나온다는 뜻이겠죠?
따라서 코드는 이렇습니다.
std::cout << ((n & 1) == 1 ? "홀수" : "짝수");
(n & 1) == 1이면 홀수입니다. 연산자 우선순위 때문에 괄호를 꼭 씌워줘야 합니다.
5. [고난이도] 비트 연산자를 사용하여 2의 제곱수를 판별하시오.
int n;
std::cin >> n;
std::cout << ( /* 이 부분에 알맞은 식은? */ ? "2의 제곱수입니다" : "2의 제곱수가 아닙니다");
2의 제곱수를 비트 연산자로 표현하면, 딱 한 개의 비트만 켜지게 됩니다.
2 = 0B0010, 4 = 0B0100, 8 = 0B1000, ....
자, 여기서 1씩 빼 볼까요?
1 = 0B0001, 3 = 0B0011, 7 = 0B0111, ...
세로끼리 AND 연산을 해 봅시다.
1 & 2 = 0, 3 & 4 = 0, 7 & 8 = 0
즉, 어떤 수가 2의 제곱수라면 그 수에서 1을 뺀 수와 AND 연산을 했을 때 0이 나와야 합니다.
int n;
std::cin >> n;
std::cout << ((n & n - 1) == 0 ? "2의 제곱수입니다" : "2의 제곱수가 아닙니다");
'C++ > C++ 강좌 문제 해답' 카테고리의 다른 글
[C++ 강좌 해답] 3-2. 조건문 정답 공개 및 해설 (0) | 2022.02.16 |
---|---|
[C++ 강좌 해답] 3-1. 반복문 정답 공개 및 해설 (0) | 2022.02.16 |
[C++ 강좌 해답] 2-2. 연산자 I 정답 공개 및 해설 (0) | 2022.02.16 |
[C++ 강좌 해답] 1-5. 입력 문제 정답 공개 및 해설 (0) | 2022.02.16 |
[C++ 강좌 해답] 1-4. 출력 문제 정답 공개 및 해설 (0) | 2022.02.16 |