-
1 文字讲解
-
2 视频讲解
-
3 过关测试
一、常量和符号常量
1、常量
常量定义:
在程序的运行过程中,其值保持不变的量称为常量。
常量分类:
基本数据类型常量有整型常量、实型常量、字符型常量、字符串常量。后面将详细学习。
2、符号常量
符号常量:指常量可以用一个标识符来表示,称为符号常量。
符号常量的定义格式:
#define 标识符 字符串
符号常量定义的位置:一般在程序开头用#define命令来定义。
例如:源程序如下
#define PI 3.1415926
main( )
{ }
此后,只要是在文件中出现的PI均可用3.1415926来代替。
使用符号常量的意义:在于当符号常量被多次引用时,既可简化程序的数据输入,又可以在修改同一个常量时只需修改一处即可。若在程序中多次出现某个常量,且该常量的位数较多(如3.1415926),则使用符号常量会方便得多。
符号常量的处理时间:在预编译时,将符号常量替换成字符串。
二、整型常量
除了大家比较熟悉的整型常量(如100、0、-256)之外,C语言中还有其他形式的整型常量,如表2-2所示。
表2-2整型常量
| 例子 | 说明 |
| -1234 | 十进制整型常量(包含数字0~9) |
| 01234 | 八进制整型常量(以0开头,包含数字0~7) |
| 0x1234 | 十六进制整型常量(以0x或0X开头,包含数字0~9、字母A~F或a~f |
| 0L | long型十进制整型常量(以l或L结尾) |
例如,0235等于十进制数157,即 。-0X23a等于十进制数-570。因为0X23a=
。
任何类型的数据在计算机中都是以二进制补码形式存储的。 short型数据在内存中占16位,long int型数据在内存中占32位,其中最高位为符号位(无符号型除外),1表示负数,0表示正数。正数的补码等于其原码,而负数的补码等于其原码的反码加1。
例1、将十进制数 +83 或 +83L 转换为补码
+ 83 的16位原码 = 0000 0000 0101 0011
+ 83L 的32位原码 = 0000 0000 0000 0000 0000 0000 0101 0011
+ 83 的补码 = + 83 的反码 = + 83 的原码
说明:① 在计算机中存放整型类型数据时,首先要分清是short类型或int(long)类型,分配的是2个字节或是4个字节;② 正数的原码 = 正数的反码 = 正数的原码。
例2、将十进制数 -83 或 -83L 转换为补码
- 83 的16位原码 = 1000 0000 0101 0011
- 83L 的32位原码 = 1000 0000 0000 0000 0000 0000 0101 0011
- 83 的16位反码 = 1111 1111 1010 1100
- 83 的16位补码 = 1111 1111 1010 1101
- 83L 的32位反码 = 1111 1111 1111 1111 1111 1111 1010 1100
- 83L 的32位补码 = 1111 1111 1111 1111 1111 1111 1010 1101
说明:负数的补码等于反码加1,负数的反码等于原码的数值位按位取反,符号位不变。
三、浮点型常量
C语言中的浮点类型主要分为单精度和双精度两种,一般以双精度为主。注意,在C语言数据中,1和1.0是两种不同类型的数,1是整数,而1.0则是双精度浮点数。
以下是合法的十进制浮点数表示:
1234.56、-1.2、0.0、.5、6.、1000000.0 。
浮点数还可采用科学计数法,以下是合法的科学计数法表示:
1.23456e2、0.345e-3、-765el2、-.5e-8、6.e-7、1.0e10 。
必须说明的是,出现在字母e(或E)之前的小数点,其左边或右边至少应有一位数字,在字母e(或E)之后必须是整数,即1.34E1.2、.e2均是非法的浮点数。
又如: 0.00013456=1.23456× ,可表示成1.23456e-4 或 0.123456e-3 。其中1.23456为尾数,10为底数,-4为指数。它在内存中的存放形式如图2-1所示。

浮点数利用指数达到了浮动小数点的效果,从而可以灵活地表达更大范围的实数。提示: 尾数有时也称为有效数字(Significand),尾数实际上是有效数字的非正式说法。
底数是事先约定好的(常取2),在计算机中不出现。
在机器中表示一个浮点数时,注意以下三点:
一是要给出尾数,用定点小数形式表示。尾数部分给出有效数字的位数,因而决定了浮点数的表示精度。
二是要给出阶码,用整数形式表示,阶码指明小数点在数据中的位置,因而决定了浮点数的表示范围。
三是浮点数也有符号位。
因此一个机器浮点数应当由阶码、尾数及其符号位组成:

其中ES表示阶码的符号,占一位,E1~En为阶码值,占n位,尾符是数N的符号,也要占一位。当底数取2时,二进制数N的小数点每右移一位,阶码减小1,相应尾数右移一位;反之,小数点每左移一位,阶码加1,相应尾数左移一位。
四、字符型常量
1、字符型常量的定义
C语言的字符型常量是用单引号(即撇号)括起来的一个字符,'*'、'a'、'A'、'&'、'!'等都是字符常量。注意: 'a'和'A'是不同的字符常量。
2、字符型常量的存储形式
字符数据存放在内存中的,并不是字符本身,而是字符的代码,即ASCII码(美国标准信息交换码)。
注意: 字符 '1' 和整数 1 是不同的概念。
字符 '1' 只是代表一个形状为 '1' 的符号,在需要时按原样输出,在内存中以ASCII码形式存储,占1个字节,如下图所示。

整数1是以整数存储方式(二进制补码方式)存储的,占2个或4个字节,如下图所示。

3、 ASCII码(美国标准信息交换码)表
ASCII标准字符集定义了128个字符,每个字符对应于一个ASCII码,编码值为0~127。表2-3列出了部分字符的ASCI码。
表2-3部分字符的ASC码
| 字符 | ASCI码 | 字符 | ASC码 |
| 回车 | 13 | A | 65 |
| 空格 | 32 | B | 66 |
| * | 42 | C | 67 |
| + | 43 | … | … |
| 0 | 48 | Z | 90 |
| 1 | 49 | a | 97 |
| 2 | 50 | b | 98 |
| 3 | 51 | c | 99 |
| … | … | … | … |
| 9 | 57 | z | 122 |
从表2-3可以看出:
①数字字符'0'~'9'的ASCII码是连续的;
②大写字母'A'~'Z'的ASCII码是连续的;
③小写字母'a'~'z'的ASCII码也是连续的;
④小写字母的ASCII码比对应的大写字母的ASC码大32。
例如:
0100 0001表示'A'或65。
0110 0001表示'a'或97。
可以看出,字符的存储形式与整数相似,不同的是,它在内存中仅占一个字节。C语言的字符型数据与整型数据之间可以通用。
除了以上的字符常量外,一些不可显示的控制字符(比如回车符、制表符、退格键等)在程序中无法用一个一般形式的字符表示,C语言允许用一种特殊形式的字符常量来表示这些字符: 一个反斜杆“\”开头的字符,称为转义字符。如'\n'表示换行,它是将普通字符“转义”成特殊字符。常用的转义字符有:
'\n' 换行符(将当前位置移到下一行开头)
'\t' 水平制表符(跳到下一个<Tab>位置)
'\b' 退格
'\r' 回车(将当前位置移到本行开头)
'\f' 走纸
'\\' 反斜杠
'\'' 单引号
'\"' 双引号
转义字符看起来是两个字符,实际上只能算一个字符。
也可以使用“\”加上一个1~3位的八进制数或“\x”加上一个1~2位的十六进制数表示的ASC码值来表示转义字符,例如:
'\0' 表示空字符。
'\33'或'\033'表示Esc键(27)。
'\07' 表示响铃
'\xA' 表示换行(10)
五、怎样确定常量的类型
字符常量:由单撇号括起来的单个字符或转义字符。
整型常量:不带小数点的数值, 系统根据数值的大小确定int型还是long型等。
浮点型常量:凡以小数形式或指数形式出现的实数。C编译系统把浮点型常量都按双精度处理分配8个字节。

