본문 바로가기
Topos Uranos

요약

이 수업은 식과 그 연산자를 다루는, 강좌의 세 번째 단원을 연다. 수업은 단원의 목적을 설명한다. 곧, 어떤 연산이 먼저 이루어지는지, 결과가 어떤 자료형인지, 어떤 부수 효과가 있는지, 어떤 식이 의미를 갖지 않는지를 알고서, 값을 확실하게 예측할 수 있는 식을 만드는 법을 가르치는 것이다. 또 단원의 네 수업과, 정수와 실수의 산술에서 비트와 수학 라이브러리에 이르기까지, 조건과 정의되지 않은 동작의 목록을 거치며 그 수업들을 잇는 실을 소개하고, 단원이 두 번째 단원에서 이미 안다고 전제하는 것, 곧 각 데이터의 자료형과 그 한계와 그 변환을 되짚는다. 그리고 단원이 해결하는 문제, 곧 경고 하나 없이 컴파일되는데도 여섯 가지 학교 수학 질문에 대한 답이 모두 틀리거나 아예 나오지 않는 프로그램의 문제를 제시하고, 단원이 뒤의 단원들과 C++ 프로그래밍 II 강좌에서 어디로 이어지는지 보여 준다.

학습 목표

  1. 단원 내용의 순서를 서술하고, 각 수업이 그 뒤의 수업에 무엇을 보태는지 설명한다.
  2. 2단원에서 필요한 것(정수 자료형과 실수 자료형, 그 값의 범위, 오버플로, 형 변환)을 떠올리고, 필요하면 복습한다.
  3. 하나의 예로, 식의 값이 계산 규칙(우선순위, 피연산자의 자료형, 효과의 순서)에 달려 있으며 그 규칙이 학교 수학의 규칙과 늘 일치하지는 않는다는 것을 미리 내다본다.
  4. 단원을 마칠 때 할 줄 알아야 하는 것을 확인하고, 그것을 뒤의 단원들에서 배울 것과 구별한다.

입문 평가

단원을 시작하기 전에 출발점을 재어 두면 좋다. 이 평가는 자기 평가이며 점수를 매기지 않는다. 목적은 오직 학습의 방향을 잡는 데 있다. 처음 네 문항은 단원이 두 번째 단원에서 이미 안다고 전제하는 것을 확인한다. 정수끼리의 나눗셈, 이진법 표기, 부호 없는 뺄셈, 그리고 부호 있는 오버플로이다. 그 뒤의 여섯 문항은 수업 순서대로 단원의 핵심 개념을 다루며, 그중 몇 문항은 학교 수학이나 기초 논리에서 출발한다. 아직 맞힐 의무는 누구에게도 없으며, 그중 두 문항에서는 “아직 모르겠다”가 정직한 답이다. 맞든 틀리든 모든 답이 요점을 설명하고 그 요점을 다루는 수업을 알려 주기 때문이다. 같은 능력은 단원 끝의 종합 수업에서 다시 측정한다.

입문 평가

단원을 시작하기 전에 출발점을 확인해 보세요. 짧은 자기 평가입니다. 점수가 매겨지지 않으며 결과는 브라우저에만 저장됩니다.

  1. 문제 1이전 단원에서어떤 프로그램이 const double r{7 / 2}; 선언을 하고 r 변수를 출력한다. 무엇이 나타나는가?

  2. 문제 2이전 단원에서수 13을 8비트 이진법으로 쓰면 어떻게 되는가?

  3. 문제 3이전 단원에서32비트 unsigned int 타입에서 std::println("{}", 0u - 1); 문장은 무엇을 출력하는가?

  4. 문제 4이전 단원에서어떤 프로그램이 int count{std::numeric_limits<int>::max()}; 문장을 실행한 뒤 count = count + 1; 문장을 실행한다. 표준은 count 변수의 값에 대해 무엇을 보장하는가?

  5. 문제 52+3⋅42 + 3 \cdot 4 및 (2+3)⋅4(2 + 3) \cdot 4의 값은 각각 얼마인가?

  6. 문제 6수학의 나눗셈 정리에 따라 나머지 rr에 0≤r<20 \leq r < 2의 조건을 둘 때, 몫 qq 및 나머지 rr(−7-7 나누기 22의 경우)의 값은 각각 얼마인가?

  7. 문제 7“비가 오고 춥다”의 부정은 무엇인가?

  8. 문제 8std::println("{}", 3 < 5); 문장은 무엇을 출력하는가?

  9. 문제 9int a{5}; 문장과 int b{a++ * 2}; 문장 뒤에 a 변수와 b 변수의 값은 각각 얼마인가?

  10. 문제 10std::println("{}", 2 ^ 3); 문장은 무엇을 출력하는가?