C++基本数据类型解惑
记得刚学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
C++基本数据类型解惑的更多相关文章
- WebAPI返回数据类型解惑
本文来自:http://www.cnblogs.com/lzrabbit/archive/2013/03/19/2948522.html 最近开始使用WebAPI,上手很容易,然后有些疑惑 1.Web ...
- WebAPI返回数据类型解惑[转]
最近开始使用WebAPI,上手很容易,然后有些疑惑 1.WebAPI默认返回什么数据类型,json还是xml? 2.怎么修改WebAPI的返回数据类型,我用IE浏览器请求返回的数据都是JSON格式的, ...
- WebAPI返回数据类型解惑 以及怎样解决Extjs无法解析返回的xml
最近开始使用WebAPI,上手很容易,然后有些疑惑 1.WebAPI默认返回什么数据类型,json还是xml? 2.怎么修改WebAPI的返回数据类型,我用IE浏览器请 求返回的数据都是JSON格式的 ...
- MySQL(二) 数据库数据类型详解
序言 今天去健身了,感觉把身体练好还是不错的,闲话不多说,把这个数据库所遇到的数据类型今天统统在这里讲清楚了,以后在看到什么数据类型,咱度应该认识,对我来说,最不熟悉的应该就是时间类型这块了.但是通过 ...
- java中的基本数据类型的转换
本文参考了如下两篇文章: https://my.oschina.net/joymufeng/blog/139952 http://www.cnblogs.com/lwbqqyumidi/p/37001 ...
- SQL Server解惑——为什么你的查询结果超出了查询时间范围
原文:SQL Server解惑--为什么你的查询结果超出了查询时间范围 废话少说,直接上SQL代码(有兴趣的测试验证一下),下面这个查询语句为什么将2008-11-27的记录查询出来了呢?这个是同事遇 ...
- JavaScript 中的数据类型
Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...
- JS 判断数据类型的三种方法
说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...
- Python高手之路【二】python基本数据类型
一:数字 int int(整型): 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值 ...
随机推荐
- QWizard中运行时默认按钮显示英文问题
QWizard中运行时默认按钮在编译前设计界面的时候是显示中文的,运行的时候就变成英文了.. 后来是发现国际化的时候有问题,解决办法如下: 在main.cpp里加: QTranslator* tran ...
- 配置Git Extension免密码发布代码到CSDN
配置Git Extension免密码发布代码到CSDN [本文默认大家安装了Git以及Git Extension] 今天花费了许多的时间处理这个问题,希望能给大家节约时间.闲话少说:使用ssh验证来p ...
- SparkSQL External Datasource简易使用之CSV
下载源码&编译: git clone https://github.com/databricks/spark-csv.git sbt/sbt assembly Maven GAV: group ...
- junit模板方法模式应用
模板方法模式 定义: 定义一个操作中的算法骨架,而将一些步骤延伸到子类中去,使得子类可以不改变一个算法的结构,即可重新定义该算法的某些特定步骤.这里需要复用的是算法的结构,也就是步骤,而步骤的实现可以 ...
- 最小生成树之prim
prim是设置一个初始结点,寻找其周围最小的边权值,并将该结点作为初始结点,继续寻找现在结点周围的边权值的最小值,但要注意如果这次寻找的某个边权值没有上次的小的话仍然保留上一次的边权值,即lowcas ...
- Unity AssetBundles and Resources指引 (四) AssetBundle使用模式
本文内容主要翻译自下面这篇文章 https://unity3d.com/cn/learn/tutorials/topics/best-practices/guide-assetbundles-and- ...
- 第三方登录 QQ登录 人人网登录 新浪微博登录
http://www.pp6.cn/Index.aspx http://www.pp6.cn/Login.aspx 网站有自己的账号系统,这里使用的第三方登录仅仅是获取第三方账号的唯一id,昵称,性别 ...
- CLRS:Insert sort in in c
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>#define ...
- SVN与TortoiseSVN实战:从入门到精通
SVN,版本控制程序,是支撑项目开发的基础工具. 在团队开发中,不管是程序员还是美工.测试等人员,都会用到SVN,通常会把SVN视为源代码管理工具,但对于SVN更准确的理解是: “帮助参与项目人员的管 ...
- sql server 2008 R2 配置开启远程访问