今天我们来看看常量的详细介绍。
常量是指程序中其值不可更改的数据,分为字面常量和符号常量。
字面常量:从字面形式即可识别的常量。
例如:64、3.1415926、A、B等等。
每个字面常量都有自己的数据类型,由它的书写格式和值来决定。
符号常量:为了编程和阅读方便,C程序中常用一个符号名称代表一个常量,称为符号常量,即以标识符形式出现的常量。
·····································································································
·····································································································
字面常量
整型常量
一个整型常量的三种表示方法:
- 十进制整数
- 八进制整数
- 十六进制整数
例如整数22可以写成以下形式:
22——十进制
026——八进制
0x16——十六进制
整型常量在字面上区分数据类型的办法:
- 整型数据默认为int型。
- 一个整型数值在-32768——32767之间,则它是short型。
- 一个整型数值不在short型范围内,但在-2147483648——2147483647之间,则它是long型。
- 在一个整型数值后面添加一个字母L或l,表示该数值为long型。(注意字母l和数字1不要混淆,一般用大写L)
- 整型数据一般默认为是signed型。
- 整型数据数值在后面添加一个字母U或u,表示该数值为unsigned型。
例如:
165 //signed int
168 //signed int
168U //unsigned int
1111111111 //signed long
-25L //signed long
65535Lu //unsigned long
·····································································································
浮点型常量
浮点型常量的表示方法:
- 小数形式
- 指数形式(科学计数法表示)
小数形式:
1.由小数点、整数部分和小数部分组成.
例如:
1.234、-54152.62
2.整数和小数可以省略其中一个,但不能省略小数点。
例如:
.21、12.、0.0
指数形式:
以f En或fen格式组成的浮点数,其中E或e表示以10为底的幂,n表示指数且必须是整型数,f可以是整数或小数。
例如:
小数3.124528156可以写成以下任意一种形式:
3.124528156 //小数形式
0.3124528156e+1,312.4528156E-2 //指数形式
浮点型常量默认为时double型。若在浮点数后面加一个字母f或F,则它是float型。若在浮点数后面加一个字母l或L,则表示它是long double型。
例如:
3.124528156 //double型
3.124528156L //long double型
3.124528156f //float型
·····································································································
字符常量
一个字符常量有三种不同的表示方法。
用字面常量表示字符常量
以一对单引号(’ ')括起来的一个字符表示字符常量。
例如:
'B'、'0'、'#'等等。
字符常量表示的是一个字符,存储的是该字符的ASCII码值。
例如:
'B'表示为英文字符B,数据值是66.
'3'表示为数字字符3,数据值是51.
单引号是字符常量的边界符,它只能包括一个字符。
注意:字符’2’和数字2是有区别的。前者为字符常量,后者为整型常量。二者的存储方式和含义是不同的。
使用转义字符表示字符常量
以反斜线(\)开头,后跟一个或几个字符序列表示的字符称为转义字符。
转义字符中的字符序列已经被替换为另外的含义,故称为转义。
使用转义字符可以表示ASCII字符集中不可打印或不方便输入的控制字符和其他特定功能的字符。
以下是部分转义字符及其含义:
注意由于字符型数据在内存中只占用1个字节,即使按无符号处理,其最大值也仅仅是255(八进制数为377)。
用ASCII码值表示字符常量
前面提到字符型数据和整型数据之间是相通的,因此可以使用字符的码值(一个整型数据)来表示字符。
例如:
使用十进制数65(或者八进制数0101,十六进制数0x41)表示大写字母'A'
使用整型数据表示字符的优点是让字符也能做算数运算,缺点是丢失了数据的字符特性,从字符的角度来看不直观。
字符串常量
以一对双引号(“”)括起来的零个或者多个字符组成的字符序列称为字符串常量,ASCII字符集或多字节字符集(如汉字,日韩等文字)都可以组成字符串。双引号是字符串常量的边界符,不是字符串的一部分,如果在字符串中要出现双一号应该使用转义字符(‘’)。
字符串常量与字符常量的不同点
- 边界符不同
字符串常量的边界符是双引号;字符常量的边界符是单引号。 - 字符数不同
字符串常量的字符数量可以是零个或多个;字符常量的字符数量仅是1个。 - 在内存中的存储形式不同
字符常量固定地占用1个字节;字符串常量至少占用1个字节。
C语言会在每个字符串常量后面自动添加一个\0字符(空字符)作为字符串结尾标记,因此零长度的字符串至少包含一个空字符(占用1个字节),包含n个字符的字符串占用n+1个字节。
符号常量
为了编程和阅读的方便,C程序中常用一个符号名称表示一个常量,称为符号常量,即以标识符形式出现的常量。
而标识符常量的本质是C语言中的预处理命令,其定义形式是:
#define 标识符 常量
其中#define是宏定义命令,作用是将标识符定义为常量值,在程序中所以出现该标识符的地方均用常量替换。
符号常量不是变量,一经定义,它所代表的常量值在其作用域中不能改变,也不能对其赋值。
符号变量名要符合标识符的命名规则,一般用大写英文字母表示,使之以与变量名等其他标识符有明显的区分。