设为首页 加入收藏

TOP

2.3.1 int类型和double类型
2013-10-07 14:57:02 来源: 作者: 【 】 浏览:77
Tags:2.3.1 int 类型 double

2.3  数据类型和表达式

他们在一起没戏。他不是她喜欢的那种类型。

鸡尾酒会上的闲言碎语

2.3.1  int类型和double类型

2和2.0在概念上是同一个数字,但C++(www.cppentry.com)将它们视为不同的类型。2是int类型,2.0是double类型,因为后者包含了小数部分(即使小数部分为0)。再次强调,计算机编程(www.cppentry.com)所涉及的数学概念与数学课上学到的略有区别。计算机的一些实际问题造成计算机中的数字有别于这些数字的抽象定义。C++(www.cppentry.com)中,整数的行为和你预期的一样。int类型保存的就是整数。但double类型要麻烦一些。由于double类型只能存储有限位数的数字,所以计算机将double类型的值保存为近似值。相反,int类型的值则作为精确值来保存。double值的具体精度在不同计算机上是不同的。但无论如何,double值的精度至少能达到14位。这个精度对于大多数应用程序已经足够。不过,即使在一些简单的情况下,它也有可能造成不易察觉的问题。因此,如果已知某个变量保存的值是整数,而且大小在计算机能够接受的范围之内,就最好把它声明为int类型。

double类型的数字常量在书写时有别于int类型的数字常量。int类型的常量绝对不能包含小数点。double类型的常量则有两种写法。对于double类型的常量,最简单的形式就是日常生活中采用的写法(带小数)。采用这种写法,double常量必须包含小数点。double和int类型的常量有一个共同点:C++(www.cppentry.com)的任何数字都不能包含逗号。

double类型的常量的一种更复杂的写法称为科学记数法或浮点记数法,特别适合表达非常大的数和非常小的小数。例如数字3.67×1017,它相当于367 000 000 000 000 000.0,在C++(www.cppentry.com)中,它最好表示成常量3.67e17。再例如数字5.89×10-6,它相当于0.000 005 89,在C++(www.cppentry.com)中,它最好表示成常量5.89e-6。e代表exponent(指数)。e-6相当于"乘以10的-6次方"。

之所以要使用e记数法,是因为通常无法直接通过键盘输入作为上标的指数。e后面的数字指出了两点:第一,小数点的移动方向;第二,要移多少位。例如,要把3.49e4变成一个没有e的数字,需要让小数点右移4位,得到34900.0,这是同一个数的另一种写法。如果e后面的数字为负,小数点就要左移指定的位数,必要时插入0。所以,3.49e-2相当于0.0349。

e之前的数字可以包含小数点,但这不是必须的。但是,e之后的指数绝对不能包含小数点。

由于计算机内存有限,所以数字通常只能用数量有限的字节来存储(也就是说,只能占用有限的存储空间)。所以,数字的大小也是有限的,而且这一限制因数字的类型而异。double类型的最大值肯定大于int类型的最大值。目前的大多数C++(www.cppentry.com)实现都要求int类型的值不得超过2 147 483 647,而double类型的值不得超过10308。

double的缘起

为什么带有小数部分的数字称为double类型?是否还有名为single的类型,它的大小只有double的一半?答案是否定的,但从某种意义上讲,也是正确的。过去,许多编程(www.cppentry.com)语言用两种类型表示带小数部分的数字。一种类型使用内存较少,但不太精确(也就是说,它不允许非常多的有效位)。第二种类型占用的内存是第一种类型的两倍(double便由此而来),所以精度更高。与此同时,它还支持更大的数字(尽管程序员对精度的关心远胜于大小)。使用两倍内存的这类数字称为"双精度"数字,使用较少内存的则称为"单精度"数字。在C++(www.cppentry.com)中,根据这一传统约定,与双精度类型对应的类型称为double类型,与单精度对应的则是float类型。C++(www.cppentry.com)还为带小数的数字提供了第三种类型,即long double类型。这些类型将在下一小节描述。不过,本书没有任何场合需要使用float和long double类型。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.2.5 格式化带小数点的数字 下一篇2.3.6 类型的兼容性

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: