Chapter Review
(C++ Primer Plus 6th, pp.126-130.)
1. Why does C++ have more than one integer type?
C++는 왜 여러 개의 정수형을 제공하는가?
Answer.
시스템의 메모리를 효율적으로 사용하기 위한 수단으로써 여러가지 정수형을 이용할 수 있다.
특히, int type은 대부분의 시스템에서 다른 data type보다 빠르고 원활하게 처리된다.
2. Declare variables matching the following descriptions:
다음 서술과 일치하는 변수들을 선언하라:
a. A short integer with the value 80
값이 80인 short형 정수
b. An unsigned int integer with the value 42,110
값이 42,110인 unsigned int형 정수
c. An integer with the value 3,000,000,000
값이 3,000,000,000인 정수
Answer.
short a {80};
unsigned int b {42110};
long long c {3000000000};
3. What safeguards does C++ provide to keep you from exceeding the limits of an integer type?
정수형의 한계를 벗어나지 않도록 C++가 제공하는 안전장치는 무엇인가?
Answer.
C++에서는 정수형의 overflow를 방지하는 별다른 대책이 없다.
integer type 변수들의 coverage는 헤더파일 climits에서 확인할 수 있다.
4. What is the distinction between 33L and 33?
33L과 33의 차이는 무엇인가?
Answer.
33L은 long type 상수이며, 33은 int type 상수이다.
5. Consider the two C++ statements that follow:
아래의 두 C++구문을 보자:
char grade = 65;
char grade = 'A';
Are they equivalent?
두 구문은 동치인가?
Answer.
첫 번째 구문은 ASCII Code를 사용하는 시스템에서만 문자 상수 A를 grade 변수에 저장할 것이며,
두 번째 구문은 모든 시스템에서 문자 상수 A를 grade 변수에 저장시킨다는 점에서
두 구문은 완벽한 동치는 아니다.
6. How could you use C++ to find out which character the code 88 represents?
Come up with at least two ways.
코드 88에 해당하는 문자를 C++을 이용하여 찾는 방법을 적어도 두 가지 제시하라.
Answer.
// Way 1
cout << char(88) << endl;
// Way 2
cout << (char)88 << endl;
// Way 3
char c = 88;
cout << c << endl;
// Way4
cout.put(char(88));
7. Assigning a long value to a float can result in a rounding error. What about assigning long to double? long long to double?
long형 값을 float형에 대입하면 반올림 오류가 발생할 수 있다. long형에서 double형 으로와 long long형에서 double형으로의 대입은 어떠한가?
Answer.
시스템마다 상이하지만, long type은 4Byte에서 8Byte사이의 범위를 갖는데, 일반적으로 4Byte size의 long형 변수라 생각하면 2,147,483,647(10자리 수)까지 저장이 가능하며, double형 변수는 13자리 유효숫자를 보장하므로 long형 변수를 double형 변수에 저장할 경우 rounding error가 발생하지 않는다.
long long형 변수는 최소 8byte size 이상의 메모리를 할당받는데, 8Byte size의 long long 변수라 생각하면, 19자리수까지 저장될 수 있고, double형은 13자리 유효숫자까지만 보장하므로, long long형 변수를 double형 변수에 저장 시, rounding error가 발생하지 않는다고 단언할 수 없다.
8. Evaluate the following expressions as C++ would:
다음과 같은 수식을 C++의 방식으로 계산하라:
a. 8 * 9 + 2
b. 6 * 3 / 4
c. 3 / 4 * 6
d. 6.0 * 3 / 4
e. 15 % 4
Answer.
a. \(8*9+2 \rightarrow 72 + 2 \rightarrow 74\)
b. \(6*3/4 \rightarrow 18/4 \rightarrow 4\) (정수형으로 명시했으므로 정수형 계산)
c. \(3/4*6 \rightarrow 0*6 \rightarrow 0\)
d. \(6.0*3/4 \rightarrow 18.0/4 \rightarrow 4.5\)
e. \(15%4 \rightarrow 3\) (Modulo 연산)
9. Suppose x1 and x2 are two type double variables that you want to add as integers and assign to an integer variable. Construct a C++ statement for doing so.
What if you want to add them as type double and then convert to int?
x1과 x2를 double형 변수라 가정하자. 이 변수들을 정수형으로 더하고, 정수형 변수에 대입하고자 할 때 이를 C++구문으로 작성하여라. 그리고 이 두 변수를 double형으로 더하고 int형으로 변환했더라면 어땠을까?
Answer.
int temp = int (x1) + int (x2);
// int형으로써 더하는 경우
int temp = int (x1 + x2);
// double형으로써 더하고 int형 변수에 대입하는 경우
10. What is the variable type for each of the following declarations?
아래 변수들의 데이터형은 어떻게 될까?
auto cars = 15;
auto iou = 150.37f;
auto level = 'B';
auto crat = U'/U00002155';
auto fract = 8.25f/2.5;
Answer.
int cars = 15;
float iou = 150.37f;
char level = 'B';
char 32_t crat = U'/U00002155';
double fract = 8.25f/2.5;