设为首页 加入收藏

TOP

2.2 字面值常量(1)
2013-10-07 00:29:55 来源: 作者: 【 】 浏览:58
Tags:2.2 面值 常量

2.2 字面值常量

像42这样的值,在程序中被当作字面值常量:字面值是因为仅能用它的值称呼它,常量是因为它的值不能修改。每个字面值都有相应的类型,例如:0是int型,3.14159是double型。字面值仅存在于内置类型,没有类类型的字面值。因此,也没有任何标准库类型的字面值。

建议:使用内置算术类型                                                                 

C++(www.cppentry.com)中整型数有点令人迷惑不解。就像C语言一样,C++(www.cppentry.com)的设计允许程序在必要时接近硬件。整型被定义成满足各种各样硬件的特性。大多数程序员可以(应该)通过限制实际使用的类型来忽略这些复杂性。

实际上,许多人用整型进行计数。例如:程序经常计算像vector或数组这种数据结构的元素个数。在第3章和第4章中,我们将看到标准库定义了一组类型用于统计对象的大小。因此,当计数这些元素时使用标准库定义的类型总是正确的。其他情况下,使用unsigned类型比较明智,可以避免值越界导致结果为负数的可能性。

当执行整型算术运算时,很少使用short类型。大多数程序中,使用short类型可能会隐含赋值越界的错误。这个错误会产生什么后果将取决于所使用的机器。比较典型的情况是值“截断(wraps around)”以至于因越界而变成很大的负数。同样的道理,虽然char类型是整型,但是char类型通常用来储存字符而不用于计算。事实上,在某些应用中char类型被当作signed类型,在另外一些应用中则被当作unsigned类型,这使得把char类型作为计算类型使用时容易出问题。

在大多数机器上,使用int类型作整型计算不易出错。就技术上而言,int类型用16位表示——对大多数应用来说太小了。实际应用中,大多数通用机器都是使用和long类型一样长的32 位来表示int类型。整型运算时,用32位表示int类型和用64位表示long类型的机器会出现选择int类型还是long类型的难题。在这些机器上,用long类型进行计算所付出的运行时代价远远高于用int类型进行同样的计算的代价,所以选择类型前要先了解程序的细节并且比较long类型与int类型的实际运行时性能代价。

决定使用哪种浮点型就容易多了:使用double类型基本上不会有错。在float类型中隐式的精度损失是不能忽视的,而double类型精度代价相对于float类型精度代价可以忽略。事实上,有些机器上,double类型比float类型的计算要快得多。long double类型提供的精度通常没有必要,且还需要承担额外的运行代价。

习题                                                              

习题2.1  int、long和short类型之间有什么差别?

习题2.2  unsigned和signed类型有什么差别?

习题2.3  如果在某机器上short类型占16位,那么可以赋给short类型的最大数是什么?unsigned short类型的最大数又是什么?

习题2.4  当给16位的unsigned short对象赋值100000时,赋的值是什么?

习题2.5  float类型和double类型有什么差别?

习题2.6  要计算抵押贷款的偿还,利率、本金和付款额应分别选用哪种类型?解释你选择的理由。

1. 整型字面值规则

定义字面值整数常量可以使用以下三种标记中的任一种:十进制、八进制和十六进制。当然这些标记不会改变其二进制位的表示形式。例如,我们能将值20定义成下列三种形式中的任意一种:

20     // decimal
024    // octal
0x14   // hexadecimal

以0(零)开头的字面值整数常量表示八进制,以0x或0X开头的表示十六进制。

字面值整数常量的类型默认为int或long类型。其精度类型决定于字面值——其值适合int就是int类型,比int大的值就是long类型。通过增加后缀,能够强制将字面值整数常量转换为long、unsigned或unsigned long类型。通过在数值后面加L或者l(字母“l”大写或小写)指定常量为long类型。

定义长整型时,使用大写字母L。小写字母l很容易和数值1混淆。


类似地,可通过在数值后面加U或u定义unsigned类型。同时加L和U就能够得到unsigned long类型的字面值常量。但其后缀不能有空格:

128u      /* unsigned   */        1024UL     /* unsigned long   */
1L       /* long   */             8Lu       /* unsigned long   */

没有short类型的字面值常量。

2. 浮点字面值规则

通常可以用十进制或者科学计数法来表示浮点字面值常量。使用科学计数法时,指数用E或者e表示。默认的浮点字面值常量为double类型。在数值的后面加上F或f表示单精度。同样加上L或者l表示扩展精度(再次提醒,不提倡使用小写字母l)。下面每一组字面值表示相同的值:

3.14159F            .001f              12.345L          0.
3.14159E0f          1E-3F              1.2345E1L       0e0

3. 布尔字面值和字符字面值

单词true和false是布尔型的字面值:

bool test = false;

可打印的字符型字面值通常用一对单引号来定义:

'a'         '2'         ','         ' ' // blank

这些字面值都是char类型的。在字符字面值前加L就能够得到wchar_t类型的宽字符字面值。如:

L'a'

4. 非打印字符的转义序列

有些字符是不可打印的。不可打印字符实际上是不可显示的字符,比如退格或者控制符。还有一些在语言中有特殊意义的字符,例如单引号、双引号和反斜线符号。不可打印字符和特殊字符都用转义字符书写。转义字符都以反斜线符号开始,C++(www.cppentry.com)语言中定义了如下转义字符:

换行符               \n                        水平制表符    \t
纵向制表符          \v                       退格符         \b
回车符              \r                       进纸符         \f
报警(响铃)符     \a                        反斜线         \\
疑问号              \                         单引号         \‘
双引号              \"

我们可以将任何字符表示为以下形式的通用转义字符:

\ooo

这里ooo表示三个八进制数字,这三个数字表示字符的数字值。下面的例子是用ASCII码字符集表示字面值常量:

\7   (响铃符)        \12   (换行符)       \40(空格符)
\0   (空字符)       \062    (‘2’)         \115(‘M’)

字符’\0’通常表示“空字符(null character)”,我们将会看到它有着非常特殊的意义。

同样也可以用十六进制转义字符来定义字符:

\xddd 

由一个反斜线符、一个x和一个或者多个十六进制数字组成。

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.6 C++程序 下一篇2.2 字面值常量(2)

评论

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