本博客知识记录自己学习中的笔记或者记录,如果有错误欢迎大家纠正。
本章学习变量和基本类型
如何选择类型
当明确知晓数值不可能为负时,选用无符号类型。
使用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位 |
在实际编程中尽量不要使用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 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为底的对数 |
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;
}