您的位置:首页 > 编程语言 > C语言/C++

C++ 初学者指南 第二篇(3)

2009-11-27 11:12 225 查看
必备技能2.2 :实字

实字是指固定的,人类可以阅读的,不可改变的值。例如数值101就是一个整形实字。实字通常也被称作是常量。实字的使用方法很简单直观,前面的几个实例程序中都用到了实字。现在是时候正式介绍一下实字了。

C++中的实字可以是任何的基本数据类型。实字的表示方式取决于它的类型。正如前面所看到的那样,字符实字是用单引号括起来的一个字符。比如:'a'和'%'都是字符型的实字。

整型实字的就是不带小数的数值。例如,10和-100都是整型实字。浮点型实字表示的时候小数点后面要跟小数部分。例如,11.123就是一个浮点类型的实字。C++中允许使用科学计数法来表示浮点类型的实字。

所有的实字都有类型的,这就引入了一个问题。我们都知道,整型类型有分为长整形,短整型和无符号的整型。浮点类型也分为三种:单精度的浮点,双精度的浮点和长形双精度浮点数。那么编译器如何确定一个实字的类型了?比如,123.23是单精度的浮点数还是双精度的浮点数了?这个问题的答案有两部分构成。第一,C++编译器自动地采用缺省的类型;第二,我们可以根据需要明确指定实字的类型。

缺省情况下,对于整型实字,C++编译器会采用最小的可以兼容的数据类型来存放这个实字,最小的从int类型开始。因此,假设整形数为16位,那么10缺省的就是int类型,但是103000就是long类型了。尽管char类型也可以用来表示10,但是编译器不会这样做,因为这意味着跨越了类型的边界。

缺省情况下,浮点类型实字的类型是double的。因此,123.23的类型就是double。

实际上,对于我们初学者来说,编译器的缺省类型对我们来说是相当够用的。只有在编译器缺省取值不满足要求的情况下,我们可以通过明确指定后缀来表示数字型实字的类型。对于浮点类型来说,如果数字的后面跟了F,这个数值就会被认为是float类型的。如果后面跟的是L,那么他就是long double类型的。对于整型类型来说,后跟U表示unsigned,L表示long。在指定一个unsigned long类型的时候,后缀U和L都要使用。下面给出了一些示例:

数据类型

常量举例
int
1 123 2100 -234
long int
3500L -34L
unsigned int
10000U 987U 40000U
unsigned long
12323UL 900000UL
float
123.23F 4.3e-3F
double
23.23 123123.33 -0.9876324
long double
1001.2L
16进制和8进制实字

有时候在程序中使用16进制或者8进制比使用10进制更方便一些。8进制就是基于8的数字系统,它使用数字0到7。在10进制中,数字10和8进制中的8是一样的,即数字10(一零)如果是10进制就代表10,如果是 8 进制就代表8。16进制系统中使用数字0到9加上字母A到F来表示10,11,12,13,14和15。例如,16进制数10就是10进制中的16。C++中我们可以指定整形实字是16进制的或者是8进制的。16进制的数值以0x开始。8进制的实字以0开始。下面是一些例子:

hex = 0xFF;//10进制中的255

oct = 011;//10进制中的9

字符串实字

C++除了支持前面提到的内置类型的实字外,还支持另外一种实字:字符串。一个字符串就是用双引号引起来的字符的集合。比如,“this is a test"就是一个字符串。在前面的示例程序中我们在count语句中实际上已经使用到了字符串实字。有一点必须注意:尽管C++允许我们定义字符串常量,但是C++中并没有内置的字符串这种类型。而在后面,我们会看到C++中把字符串作为字符的数组来支持的(C++在类库中提供了string类型来支持字符串)。

专家答疑

问:

我们知道了如何指定一个字符实字。那么wchar_t类型的实字也是用同样的方式来指定的吗?

答:

不是的。一个宽位字符常量(也就是我们说的wchar_t 类型)前面需要加上一个字符L。例如

wchar_t wc;

wc = L'A';

上面的代码为wc赋值了一个宽位的常量值A。在日常的编程中,我们不会用到宽位字符的。但是如果你需要编写多过语言的程序,可能就要用到宽位字符了。

转义字符

单引号引起来的字符常量大多数都是可打印的,但是也有部分字符,比如回车,当在使用文本编辑器的时候就会出现问题。另外,一些其它的字符,比如单引号和双引号在C++中都是有特殊含义的,我们不能直接使用它。基于上述的原因,C++提供了转义字符,有时候也被称作为反斜杠字符常量,如表格2-3所示,我们可以在程序中使用这些转义字符。可以看到,我们之前使用的/n就是一个转义字符。

代码
含义
\b
退格
\f
换页
\n
新的一行(换行)
\r
回车
\t
水平制表符
\"
双引号
\'
单引号
\\
反斜杠
\v
垂直制表符
\a
告警
\?
问号
\N
8进制常量
\xN
16进制常量
表2-3 转义字符
专家答疑

问:

由一个字符组成的字符串是否和一个字符常量一样?比如,"k"和'k'一样吗?

答:

不。我们不能把字符和字符串混淆。一个字符实字代表的是一个char类型的单一字母。只有一个字符的字符串依然是字符串,不是字符。经字符串是有字符构成的,但是他们是不同的类型。
下面的程序展示了一个转义字符:

#include <iostream>

using namespace std;

int main()

{

cout << "one\ttwo\tthree\n" ;

cout << "123\b\b45" ; //\b\b将会退格掉2和3

return 0;

}

程序的输入如下:

one two three

145

上面的程序中,第一个cout语句使用了制表符来确定tow和three的位置。第二个cout语句中显示输出了一个123,然后两个退格就删除了2和3,最后输出了字符4和5。

练习:

1. 缺省情况下,实字10的类型是什么?10.0呢?

2. 怎么指定100为long int类型?怎么指定100为unsigned int类型?

3. /b是什么意思?

答案:

1. 10是int类型,10.0是double类型。

2. 指定100为long int:100L;指定100为unsigned int为:100U

3. \b退格的转义字符。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: