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位,取值 ...
随机推荐
- 海外支付:抵御信用卡欺诈的CyberSource
海外支付:抵御信用卡欺诈的CyberSource 吴剑 2014-06-04 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian 吴剑 http://www.cn ...
- jquery实现跨域提交(原创)
jquery实现跨域提交(原创) 我们在运营一个产品的时候往往会遇到这样那样的表单提交,如客户数据收集.申请加盟.意见反馈等,由此我们开发了这样一个产品,可以理解为万能型数据收集平台,不难想到,我 ...
- JFrame 实现全屏透明背景
JFrame f=new JFrame(); f.setUndecorated(true); f.setBackground(new Color(0,0,0,0)); To ...
- Centos7 install Openstack - (第三节)添加镜像服务(Glance)
Centos7 install Openstack - (第三节)添加镜像服务(Glance) 我的blog地址:http://www.cnblogs.com/caoguo 该文根据openstack ...
- fastCGI (二)各方优劣
1. 克服 CGI 的瓶颈 1.1 令人头痛的效率问题 拜 CGI 之赐,网站不再只有固定不变的图形和文字,藉由程序动态产生的网页可以让网站好象『活』了起来.小从简单的网页计数器,留言版,大至处理众多 ...
- Oracle密码过期the password has expired
oracle11G新特征,半年会提醒一次修改新密码 正常情况:只要输入原先帐号密码,回车即可. 不正常情况:输入新密码帐号,回车,提示验证错误,这时就需要切换到没过期的管理员用户,高权限也行,输入 ...
- 循环链表Josephus问题(c,cpp)
问题描述: 设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m个的人出列,然后从出列的下一个人重新开始报数,数到第m个的人又出列,.......,如此反复直到所有的人出列为止. Joseph ...
- socket学习笔记——实现收发文件(Windows)
记录下来,供自己学习! server.c #define _CRT_SECURE_NO_DEPRECATE #include <stdio.h> #include <stdlib.h ...
- Tasks、 activity 及 activity stack
一. Activity的四种加载模式 Activity之间的跳转,或者说加载一个新的Activity,一般对于开发者来说,都不是一个太难的问题.直到后来随着不断的深入,才发现原来Activity的加载 ...
- 【EF 5】结合项目实战分析EF三大工作模式之—Database First
导读:所谓的EF的Databasefirst工作模式,是目前我们(不涉及社会领域)用的最广的一种模式,也是本次ITOO开发所采用的工作模式.本篇博客,就分析在项目中通过Database First模式 ...