C++ Primer Plus 第三章复习题答案
3.6 复习题
以满足各种开发的需要
a. int i = 80; b. unsigned int i = 42110; long i = 3000000000;
自动类型转换
33L是long型 33 应该是int 型
等价
char i = 88;
cout<< i<<endl;
或者
int i = 88;
printf("%c",i);
将long赋值给double应该不会出现误差,long long变量赋给double变量也会有舍入误差。
74 4 0 4.5 3
int i = (int)x1+(int)x2;
和
int i = int(x1+x2);
int float char char_32t double
鲁班七号:
目的是为了满足不同的计算需求。比如某小学某个班的学生数一般用 short 或者更精确地说是 unsigned short 即可(视具体的系统而定)、而某大学的师生个数一般用 int 或者更精确地说用 unsigned int 即可(视具体的系统而定)、而目前的中国人口数则需要用 long 或者更精确地说用 unsigned long、而目前的全球人口数则必须得使用 long long 或者更精确地说是 unsigned long long。更具体的可参见C/C++中各种类型int、long long、double表示范围(最大最小值)。
a) short Value=80; b) unsigned int Value=42110; c) long long Value=3000000000; 或 unsigned long Value=3000000000;(建议使用这个)
C++本身并不能限制某个类型是否超出了它类型的范围,但是可以用 limits 头文件来看某种类型具体的范围。可参见问题 1 中列出的连接。
常量 33L 实际上等价于 long Value=33,而常量 33 则等价于 int Value=33。
并不等价,得视系统而定,如果是使用ASCII码的系统则是一样的,但在某些系统中可能不一样。并且常量 65 是 int 型的,而 ‘A’ 是 char 类型的。
char c = 88; cout << c << endl; cout.put(char(88))<<endl; cout << char(88) << endl; cout << (char)88 << endl;也就是说可以使用直接输出,cout.put()函数,或者强制转换的方式。
这种情况也还是得视系统而定,也就是说取决于两种类型的长度。如果 long 为 4 个字节,则没有损失,因为占 4 个字节的 long 的最大值为 2147483647,即有十位数,而 double 提供了至少十三位有效数字,这种情况下没有舍入误差。但是 long long 类型提供了 19 位数字,这超过了 double 的有效位数,故这种情况下有舍入误差。
a) 74, b) 4, c) 0, d) 4.5, e) 3。
用C风格的代码可以写为:int Result=(int)x1+(int)x2; C++风格的则可以写为:int Result=int(x1)+int(x2); 第二种情况类似,如下:int Result=(int)(x1+x2); 或者int Result=int(x1+x2);
a) int, b) float, c) char, d) char32_t, e) double。