C++ 初学者指南 第二篇(3)实字(即常量)

必备技能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退格的转义字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值