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的区别是什么。
在实际编程中尽量不要使用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读程序写结果
输出如下
可以看到,当无符号数差为负数的时候,会变成一个大的正整数,在使用加减运算的时候要注意。
2.4 编写程序检查你的估计是否正确,如果不正确,请仔细读本节知道弄明白问题所在。
无符号结果为负数时,由于没有符号位,所以会变成一个超级大的正整数,
2.5指出下述字面值的数据类型并说明每一组内几种字面值的区别
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,最后转到新一行。
本章学习变量和基本类型
如何选择类型
当明确知晓数值不可能为负时,选用无符号类型。
使用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位 |
---|---|---|---|---|
字符 | char | 8位 | 8位 | 8位 |
短整形 | short | 16位 | 16位 | 16位 |
整形 | int | 16位 | 32位 | 32位 |
单精度 | float | 32位 | 32位 | 64位 |
双精度 | do | 64位 | 64位 | 64位 |
长整形 | long | 32位 | 32位 | 64位 |
长整形 | long long | 64位 | 64位 | 64位 |
指针 | p | 16位 | 32位 | 64位 |
无符号类型和带符号类型的区别是有一个位表示符号,
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 a | L’a’ | Unicode a | “a” | string a | L”a” | Unicode string a |
10 | int 10 | 10u | unsigned int 10 | 10 L | long 10 | 10uL | unsigned long 10 |
012 | 8进制12 | 0xC | 16进制C | 3.14 | 浮点数3.14 | 3.14f | 单精度浮点数3.14 |
3.14L | long double 3.14 | 10 | int 10 | 10u | unsigned 10 | 10. | 含义 |
10e-2 | 以10为底的对数 |
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; }
相关文章推荐
- 格式字符d c s f
- 如何学好C语言/C++
- c++和java的区别
- VC++/VS2010 Win32控制台程序 运行结束 dos窗口立刻消失/一闪而过 的解决方法
- 二叉树的建立与遍历(C语言简单实现)
- C++面试笔试经典题集
- [译]C++书籍终极推荐
- 正则表达式_Java_SE_C++_简单题_判断输入的日期是否是正确的
- C语言 const, static, static const 的区别
- Windows下安装Code::Blocks 13.12进行C/C++开发
- C++项目中的extern "C" {}
- C++动态库调用配置
- C++primer笔记(21)
- 深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结
- C++标准库头文件
- 深入理解C++虚函数表
- 回调函数在C/C++中的使用
- 回调函数在C/C++中的使用
- 为什么设计模式java实现的书比较多,C++却很少.
- [C++] inline function