您的位置:首页 > 编程语言 > C语言/C++

c++ primer第五版(中文)习题答案 第二章第一节-基本内置类型

2015-10-25 21:06 435 查看
本博客知识记录自己学习中的笔记或者记录,如果有错误欢迎大家纠正。

本章学习变量和基本类型

如何选择类型

当明确知晓数值不可能为负时,选用无符号类型。

使用int执行整数运算。在实际应用中,short常常显得太小而long一般和int有一样的尺寸。如果你的数值超过了int的表示范围,选用long long。

在算术表达式中不要使用char或bool,只有在存放字符或布尔值时才使用它们,因为类型char在一些机器上是有符号的,而一些在机器上是无符号的,所以如果使用char进行运算 特别容易出问题,如果你需要一个不大的整数,那么明智选择它的类型是signed char或者unsigned char。

执行浮点运算符选用double 这是因为float通常精度不够而且双精度浮点数和单精度浮点数的计算代价相差无几,事实上,对于某些机器来说,双精度运算甚至比单精度还快,long double提供的精度在一般情况下是没有必要的况且它带来的 运行时消耗也不容易忽视。

练习

2.1 类型int long longlong 和short的区别是什么,无符号类型和带符号类型的区别是什么,float和double的区别是什么。

含义类型16位32位64位
字符char8位8位8位
短整形short16位16位16位
整形int16位32位32位
单精度float32位32位64位
双精度do64位64位64位
长整形long32位32位64位
长整形long long64位64位64位
指针p16位32位64位
在实际编程中尽量不要使用long 不同平台不同长度,指针类型也要注意,指针在转int类型的时候 使用intptr_t(stddef.h)不然在32位程序 编译为64位的时候出现问题,之前的解决办法是把int类型的指针改为了long,但是现在知道应该使用intptr_t。编程中要尽量使用sizeof来计算数据类型的大小,ssize_t和size_t分别是unsigned和signed size of computer word size,它们也是表示计算机的字长。

无符号类型和带符号类型的区别是有一个位表示符号,

float和double的区别是什么

2.2 计算按揭贷款,对于利率,本金,和付款分别选择何种数据类型,说明理由

利率,本机,付款 都采用双精度浮点数,

2.3读程序写结果

unsigned u = 10,u2=42;
std::cout<<u2-u<<std::endl;
std::cout<<u-u2<<std::endl;

int i =10,i2=42;
std::cout<<i2-i<<std::endl;
std::cout<<i-i2<<std::endl;
std::cout<<i-u<<std::endl;
std::cout<<u-i<<std::endl;


输出如下



可以看到,当无符号数差为负数的时候,会变成一个大的正整数,在使用加减运算的时候要注意。

2.4 编写程序检查你的估计是否正确,如果不正确,请仔细读本节知道弄明白问题所在。

无符号结果为负数时,由于没有符号位,所以会变成一个超级大的正整数,

2.5指出下述字面值的数据类型并说明每一组内几种字面值的区别

标示含义标示含义标示含义标示含义
‘a’char aL’a’Unicode a“a”string aL”a”Unicode string a
10int 1010uunsigned int 1010 Llong 1010uLunsigned long 10
0128进制120xC16进制C3.14浮点数3.143.14f单精度浮点数3.14
3.14Llong double 3.1410int 1010uunsigned 1010.含义
10e-2以10为底的对数
2.6下面两组定义是否有区别,如果有,请叙述子

int month =9 ; day=7;

int month =09 ; day=07;

有区别一种是10进制 ,一种是8进制,第二行有错误,如果使用8进制 则不能有超过7的数存在,这里09是错误的表述。

2.7 下述字面值表示何种含义,他们各自的数据类型是什么?

a. “who goes with F\145rgues?\012”

b.3.14e1L

c.1024f

d.3.14L

a.使用了转义字符,可以查看表或者,在程序中输出,输出为“who goes with Fergues?加换行。

b. 31.4 long double

c.1024 float

d.3.14 long double

2.8 请用转义序列编写一段程序,要求先输出2M,然后转到新一行。修改程序使其输出2,然后输出制表符,在输出M,最后转到新一行。

#include <iostream>

int main()
{
std::cout << 2 << "\115\012";//\115M \012换行
std::cout << 2 << "\t\115\012"; //\t制表符
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: