C++常量(C++数值常量、字符串常量、符号常量)

C++常量(C++数值常量、字符串常量、符号常量)

一、 数值常量

数值常量就是通常所说的常数。C++,数值常量是区分类型的,从字面形式即可识别其类型。

1. 整型常量(整数)的类型
在上一节中已知道: 整型数据可分为int,short int,long int以及unsigned int,unsigned short,unsigned long等类别。整型常量也分为以上类别。为什么将数值常量区分为不同的类别呢?因为在进行赋值或函数的参数虚实结合时要求数据类型匹配。

那么,一个整型常量怎样从字面上区分为以上的类别呢?

1 一个整数,如果其值在-32768~+32767范围内,认为它是short int,它可以赋值给short int型、int型和long int型变量。

2 一个整数,如果其值超过了上述范围,而在-2147483648~+2147483647范围内,则认为它是long int,可以将它赋值给一个intlong int型变量。

3 如果某一计算机系统的C++版本(例如Visual C++)确定intlong int型数据在内存中占据的长度相同,则它们能够表示的数值的范围相同。因此,一个int型的常量也同时是一个long int型常量,可以赋给int型或long int型变量。

4 常量无unsigned型。但一个非负值的整数可以赋值给unsigned整型变量,只要它的范围不超过变量的取值范围即可。

5
一个整型常量可以用3种不同的方式表示:十进制整数。如1357,-432,0等。在一个整型常量后面加一个字母lL,则认为是long int型常量。例如123L,421L,0L,这往往用于函数调用中。如果函数的形参为long int,则要求实参也为long int,此时用123作实参不行,而要用123L作实参。

6 八进制整数。在常数的开头加一个数字0,就表示这是以八进制数形式表示的常数。如020表示这是八进制数20,(20)8,它相当于十进制数16

7 十六进制整数。在常数的开头加一个数字0和一个英文字母X(x),就表示这是以十六进制数形式表示的常数。如0X20表示这是十六进制数20,(20)16,它相当于十进制数32

2.浮点数的表示方法

一个浮点数可以用两种不同的方式表示:

8 十进制小数形式。如21.456,-7.98等。它一般由整数部分和小数部分组成,可以省略其中之一(78..06,.0),但不能二者皆省略。C++编译系统把用这种形式表示的浮点数一律按双精度常量处理,在内存中占8个字节。如果在实数的数字之后加字母Ff,表示此数为单精度浮点数,1234F,-43f,4个字节。如果加字母Ll,表示此数为长双精度数(long double),GCC中占12个字节,Visual C++ 6.0中占8个字节。

9 指数形式(即浮点形式)
一个浮点数可以写成指数形式,3.14159可以表示为0.314159×101,3.14159×100,31.4159×10-1,
314.159×10-2等形式。在程序中应表示为: 0.314159e1,3.14159e0,31.4159e-1 ,314.159e-2,用字母e表示其后的数是以10为底的幂,e12表示1012。其一般形式为:
数符 数字部分 指数部分
上面各数据中的0.314159,3.14159, 31.4159, 314.159 等就是其中的数字部分。可以看到: 由于指数部分的存在,使得同一个浮点数可以用不同的指数形式来表示,数字部分中小数点的位置是浮动的。例如:
a=0.314159e1;
a=3.14159e0;
a=31.4159e-1;
a=314.159e-2;
以上4个赋值语句中,用了不同形式的浮点数,但其作用是相同的。


在程序中不论把浮点数写成小数形式还是指数形式,在内存中都是以指数形式(即浮点形式)存储的。例如不论在程序中写成314.159314.159e0,31.4159e1,3.14159e2, 0.314159e3等形式,在内存中都是以规范化的指数形式存放,如图2.3所示。

数字部分必须小于1,同时,小数点后面第一个数字必须是一个非0数字,例如不能是0.0314159。因此314.159314.159e0,31.4159e1,3.14159e2, 0.314159e3在内存中表示成0.314159×103。存储单元分为两部分,一部分用来存放数字部分,一部分用来存放指数部分。为便于理解,在图2.3中是用十进制表示的,实际上在存储单元中是用二进制数来表示小数部分,2的幂次来表示指数部分的。

对于以指数形式表示的数值常量,也都作为双精度常量处理。

二、字符常量

1. 普通的字符常量
用单撇号括起来的一个字符就是字符型常量。如′a′,′#′,′%′,′D′都是合法的字符常量,在内存中占一个字节。注意:
字符常量只能包括一个字符,′AB′ 是不合法的。
字符常量区分大小写字母,′A′′a′是两个不同的字符常量。
撇号(′)是定界符,而不属于字符常量的一部分。如cout<<′a′;输出的是一个字母“a”,而不是3个字符“′a′ ”

2. 转义字符常量
除了以上形式的字符常量外,C++还允许用一种特殊形式的字符常量,就是以 “\”开头的字符序列。例如,′\n′代表一个换行符。“cout<<′\n′; ” 将输出一个换行,其作用与“cout<<endl; ” 相同。这种控制字符”,在屏幕上是不能显示的。在程序中也无法用一个一般形式的字符表示,只能采用特殊形式来表示。

3. 字符数据在内存中的存储形式及其使用方法
将一个字符常量存放到内存单元时,实际上并不是把该字符本身放到内存单元中去,而是将该字符相应的ASCII代码放到存储单元中。如果字符变量c1的值为′a′,c2的值为′b′,则在变量中存放的是′a′ASCII97,′b′ ASCII98,如图2.4(a)所示,实际上在内存中是以二进制形式存放的,如图2.4(b)所示。

既然字符数据是以ASCII码存储的,它的存储形式就与整数的存储形式类似。这样,C++中字符型数据和整型数据之间就可以通用。一个字符数据可以赋给一个整型变量,反之,一个整型数据也可以赋给一个字符变量。也可以对字符数据进行算术运算,此时相当于对它们的ASCII码进行算术运算。

2.1 将字符赋给整型变量。
#include <iostream>
using namespace std;
int main( )
{
int i,j; //ij是整型变量
i=′A′; //将一个字符常量赋给整型变量i
j=′B′; //将一个字符常量赋给整型变量j
cout<<i<<′ ′<<j<<′\n′; //输出整型变量ij的值,′\n′ 是换行符
return 0;
}
执行时输出
65 66
ij被指定为整型变量。但在第5和第6行中,将字符′A′′B′分别赋给ij,它的作用相当于以下两个赋值语句:
i=65;j=66;
因为′A′′B′ASCII码为6566。在程序的第5和第6行是把6566直接存放到ij的内存单元中。因此输出6566

可以看到:在一定条件下,字符型数据和整型数据是可以通用的。但是应注意字符数据只占一个字节,它只能存放0~255范围内的整数。

2.2 字符数据与整数进行算术运算。下面程序的作用是将小写字母转换为大写字母。
#include <iostream>
using namespace std;
int main( )
{
char c1,c2;
c1=′a′;
c2=′b′;
c1=c1-32;
c2=c2-32;
cout<<c1<<′ ′<<c2<<endl;
return 0;
}
运行结果为
A B
′a′ASCII码为97,′A′ASCII码为65,′b′98,′B′66。从ASCII代码表中可以看到每一个小写字母比它相应的大写字母的ASCII代码大32C++符数据与数值直接进行算术运算,′a′-32得到整数65,′b′-32得到整数66。将6566存放在c1,c2,由于c1,c2是字符变量,因此用cout输出c1,c2,得到字符AB(AASCII码为65,BASCII码为66)

三、 字符串常量

用双撇号括起来的部分就是字符串常量,″abc″,″Hello!″,″a+b″,″Liping″都是字符串常量。字符串常量″abc″在内存中占4个字节(而不是3个字节),见图2.5

编译系统会在字符串最后自动加一个′\0′作为字符串结束标志。但′\0′并不是字符串的一部分,它只作为字符串的结束标志。如
cout<<″abc″<<endl;
输出3个字符abc,而不包括′\0′

注意: ″a″′a′代表不同的含义,″a″是字符串常量,′a′ 是字符常量。前者占两个字节,后者占1个字节。请分析下面的程序片段:
char c;//定义一个字符变量
c=′a′;//正确
c=″a″; //错误,c只能容纳一个字符

请思考: 字符串常量″abc\n″包含几个字符?不是5个而是4个字符,其中“\n”是一个转义字符。但它在内存中占5个字节(包括一个“\0”字符) 。编译系统遇到“\”时就会把它认作转义字符的标志,把它和其后的字符一起作为一个转义字符。

如果“\”后面的字符不能与“\”组成一个合法的转义字符(″\c″),则在编译时显示出错信息。如果希望将“\”字符也作为字符串中的一个字符,则应写为″abc\\n″,此时字符包括5个字符,a,b,c,\,n。如果有以下输出语句:
cout<<″abc\\\n″<<endl;
则会输出: abc\,然后换行。同理执行
cout<<″I say \″Thank you!\″\n″;
的输出是: I say ″Thank you!″

如果在一个字符串中最后一个字符为“\”,则表示它是续行符,下一行的字符是该字符串的一部分,且在两行字符串间无空格。如
cout<<″We must study C\//本行最后的“\”后面的空格和换行均不起作用
++ hard!″;//本行的字符紧连在上一行最后的“\”前面字符之后
则输出:
We must study C++ hard!

四、符号常量

为了编程和阅读的方便,C++程序设计中,常用一个符号名代表一个常量,称为符号常量,即以标识符形式出现的常量。例2.3 符号常量的使用。
#define PRICE 30 //注意这不是语句,末尾不要加分号
int main ( )
{
int num,total;
num=10;
total=num * PRICE;
cout<<″total=″<<total<<endl;
return 0;
}
程序中用预处理命令#define指定PRICE在本程序单位中代表常量30,此后凡在本程序单位中出现的PRICE都代表30,可以和常量一样进行运算,程序运行结果为
total=300
请注意符号常量虽然有名字,但它不是变量。它的值在其作用域(在本例中为主函数)内是不能改变的,也不能被赋值。如用赋值语句“PRICE=40;”PRICE赋值是错误的。 使用符号常量的好处是:

10 含义清楚。

11 在需要改变一个常量时能做到一改全改。 如
#define PRICE 35

转载

guyue

2014—7—24

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值