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位,取值 ...
随机推荐
- 【转】maven POM.xml 标签详解
http://blog.csdn.net/sunzhenhua0608/article/details/32938533 pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现 ...
- ASP.NET MVC开发微信(一)
public string index() { return Content(""); }
- cookie机制和session机制的原理和区别[转]
一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于在服务器端保持状态的 ...
- JavaScript对象的创建总结
方式 缺点 优点 基于已有对象扩充属性和方法 不可重用,没有约束 无 工厂方法 检测不出是什么的实例 简单封装,可以传参 构造方法 每创建一个对象就有开辟存放方法的空间 能通过instanceof检测 ...
- oracle 事务测试
此文章是根据官方改变 模拟帐户转账流程 1.JOHN帐户扣除-DAVID帐户增加-记录日志-事务提交 三个操作必须全部完成此事务才完成,否则失败 创建帐户余额表自增字段自增序列: ; 创建支票表 ...
- sqlserver 常用sql语句
SELECT COUNT(*) FROM WeixinUser SELECT COUNT(*) FROM WeixinUser WHERE datediff(day, CreateTime,getda ...
- vb 取得桌面路径
txtPath.Text = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
- MSP430F149学习之路——时钟2
代码一: /************************** 功能:LED每隔1秒闪烁一次 ****************************/ #include <msp430x14 ...
- button的type属性
今天为看懂一段js代码纠结了很久,搞不明白数据是如何实现post,因为button没有规定属性,其次对submit事件没太搞明白.忽然想起默认属性这个概念,豁然开朗,啊~ 1.请始终为按钮规定 typ ...
- NULL值比较,两个列的合并,列值按条件替换。
show create table 表名 -- 显示创建表的sql语句. 为已有的表增加新列.alter table 表名 add 列名 int NULL -- 此行加了一个int 类型 默认可以nu ...