记得刚学C语言的时候,对那些double,float,long,unsigned int各种混乱,基本是随便用,对数据类型没有一个整体的框架.最近学习<<C++ primer plus>>一书,清晰了许多.于此以读书笔记的形式记录关于C++基本数据类型的知识.
高度概括,C++数据类型只有两种,整型与浮点型.
一,整数:
就是没有小数部分的数字(除bool外按宽度递增排序).它包括:
- char
- short
- int
- long
- long long
- bool
其中除bool外每种类型都有符号版本与无符号版本.共11种.
两种较为特殊的情况
- char最常用来处理字符,但由于所有的字符都有其数值编码(例如ASCII字符集),所以char可以看做比short更小的整型.
- bool:字面值true可转化为1,false可转换为0.另外任何数值在字都可以转换为bool值 非零数值为true,0为false.
unsigned与signed:
当数值不会为负时,比如生命值,人口数量等,可以使用无符号类型,可以增大变量的最大储存值.
例如:short表示的范围为-32768到+32767 则unsigned版本为0-65535
整型如此之多,那么,如何选择整数类型:
- 如果没有足够的理由来用其他类型,则用int.因为int通常被设置为对计算机而言最为自然的长度,即处理效率最高的长度.
- 如果变量表示的值不可能为负数,则可以使用无符号类型,这样可以表达更大的值.
- 如果知道变量表示的值大于16位整数的最大可能值,,则使用long(即使有的系统int为32位,确保程序的可移植性)
- 如果储存的值超过20亿,则使用long long
- 如果short比int小,则可以使用short以节省内存.(C++中short至少16位,int至少与short一样长).
- 如果节省内存很重要,则用short
二,浮点数:
能够表示带小数部分的数字
浮点的意思:
诸如2.5,3.15159之类的数字,计算机将其分为两部分进行储存.一部分表示值,另一部分用于对数值进行缩放.
例如:34.125与3412.5它们除了小数点位置不同之外,数字都相同.可以把第一个数字看成0.34125(基准值)放大100倍,第二个数看成0.34125放大10000倍.缩放因子的作用是移动小数点的位置,浮点因此得名.
C++中浮点类型有以下3种:
- float
- double
- long double
这三种有效位数可以一样多,通常,float为32位,double为64位,long double为80,96或者128位.
如何选择浮点数类型:
- 精度要求高的时候用double.double精度高,有效数字16位,float精度6位或7位
- 能用单精度时不要用双精度,以省内存.(double消耗内存是float的两倍,double的运算速度比float慢得多)
- 补充一点:
在在代码中对浮点数据类型直接使用== 、<= 、>=、 !=等运算符进行比较都是不正确的。正确的方法应该是 将其差或和于小数进行比较
通常与10^6 比如浮点数与零的比较:
等于0关系: fabs(i)<=1e-6
大于0关系: i>1e-6
小于0关系: i<1e-6