目录
1.1 变量和常量
在计算计高级语言中,数据有两种表现形式:常量和变量。
1.1.1 常量
在程序运行过程中,其值不能被改变的量称为常量。数值常量就是数学中的常量。常量有整形常量、实型常量、字符常量、字符串常量、符号常量五种类型。
(1)整型常量
整型常量就是通常的整数,包括正整数、负整数和0,其数据类型显然是整型。除此之外,整型常量包括短整型、长整型和无符号型等不同类型。
在C语言中,整型常量有三种书写形式:
①十进制整数。
十进制整数就是通常整数的写法。例如:11、15、21等。
②八进制整数。
八进制整数的书写形式是在通常八进制整数的前面加一个数字0。例如:00、0111、015、021等,它们分别表示十进制整数:0、73、13、17
③十六进制整数。
9十六进制整数的书写形式是在通常十六进制整数的前面加0x。例如:0x0、0x111、0x15、0x21等,它们分别表示十进制整数0、273、21、33。
注意:整型常量前面没有"+"或者"-",-10其实是一元运算符和操作数10,同样整型常量的十进制表示并没有0,单独写一个0其实是一个八进制常量。
(2)实型常量
实型常量又称实数或浮点数。在C语言中可以用单精度型和双精度型两种形式表示实型常量,分别用类型名float和double进行定义。
又可以分为小数形式和指数形式:
①小数形式即一般形式的实数。
它是由整数部分、小数点、小数部分组成,其中整数部分或小数部分可以省略其中一个。数的正负用前面的“+”(可以省略)号或“-”号来区分。
②指数形式即指数形式的实数。
它是由尾数部分、小写字母e或大写字母E、指数部分组成,形式如“尾数E指数”或“尾数e指数”。指数形式的实数它的数值可以用公式计算:尾数*10(指数)。由于在计算机输入或输出时无法表示上角或下角,估规定以字母e或E代表以19为底的指数。
注意:e或E之间必须有数字,且e或E后面必须为整数。如不能写成e4,11e2.4。
(3)字符常量
有两种形式的字符常量:普通字符和转义字符。
①普通字符
字符常量是指用一对单引号括起来的一个字符。如‘a’,‘9’,‘!’。字符常量中的单引号只起定界作用并不表示字符本身,字符常量存储计算机存储单元中时,并不是存储字符本身,而是以其代码(一般采用ASCII代码)存储的。
②转义字符
C语言中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。
常用的以“\”开头的特殊字符见下表:
转义符及其作用
转义字符 | 意义 | ASCII码值(十进制) |
\a | 响铃(BEL) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\\ | 代表一个反斜线字符''\' | 092 |
\' | 代表一个单引号(撇号)字符 | 039 |
\" | 代表一个双引号字符 | 034 |
\? | 代表一个问号 | 063 |
\0 | 空字符(NUL) | 000 |
\ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\xhh | 十六进制所代表的任意字符 | 十六进制 |
注意:
1. 区分:"/" 与 反斜杠:"\" ,此处不可互换
2. \xhh 十六进制转义不限制字符个数 '\x000000000000F' == '\xF'
(4)字符串常量
字符串常量是用双引号(“”)括起来的0个或者多个字符组成的序列,且每个字符串尾会自动加一个 ‘\0’ 作为字符串结束标志。
注意:不能错写成'CHINA','abc'。单撇号内只能包含一个字符,双撇号内才能包含一个字符串。
(5)符号常量
在C语言中,可以用一个标识符来表示一个常量,这个标识符称之为符号常量。
符号常量在使用之前必须先定义,用#define指令,指定用一个符号名称代表一个常量,形式如下:
#define 标识符 常量
例如:#define PI 3.1415926 //注意行末没有分号
经过以上指定后,文本中从此行开始所有的PI都代表3.14115926。在对程序进行编译前,预处理器先对PI进行处理,把所有PI全部置换为3.1415926。在预编译后,符号常量已经全部变成字面常量(3.1415926)。
1.1.2 变量
变量是代表一个有名字的,具有特定属性的一个存储单元。它用来存放数据,也就是存放变量的值。在程序运行期间,变量的值是可以改变的。注意变量必须先定义,后使用。
如下图,区分:"i" 到 "i_pointer" 为变量名,内存用户数据区为变量值,“2000” 到 “3010” 为存储单元的地址。
从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。
1.1.3 变常量
变常量与常量的异同是:变常量具有常量的基本属性:有类型,占存单元,只是不允许改变其值。可以说,变常量是有名字的不变量,而常量是没有名字的不变量。有名字就便于在程序中被引用。
注意:有些编译系统还没有实现C99的功能,因此不能使用常变量。
1.1.4 标识符
在计算机高级语言中,标识符是用户编程时使用的名字,用于给变量、函数、数组、类型等命名的有效字符序列统称为标识符。简单来说,标识符就是一个对象的名字,以建立起名称与使用之间的关系。
C语言规定标识符只能由字母、数字和下画线3种字符组成,且第1个字符必须为字母或者下画线。
注意:编译系统认为大写字母和小写字母是两个不同的字符。
2.2 数据类型
C语言要求在定义所有的变量时都要指定变量的类型。常量也是区分类型的。在计算机中,数据是存放在存储单元中的,是具体存在的。且每个存储单元都是由有限的字节构成的,每个存储单元中存放数据的范围是有限的,不可能存放“无穷大”的数,也不能存放循环小数。
所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式。不同的类型分配不同的长度和存储形式。
C语言常用的类型如下表:
数据类型 | 释义 | 内存大小(字节) |
char | 字符数据类型 | 1 |
short | 短整型 | 2 |
int | 整形 | 4 |
long | 长整型 | 4/8 |
long long | 更长的整形 | 8 |
float | 单精度浮点数 | 4 |
double | 双精度浮点数 | 8 |
2.2.1 整型数据的分类
整型数据可以分为基本整型、短整型、长整型和双长整型四类。
(1)基本整型(int)
编译系统分配给int型数据2个字节或4个字节(由具体的编译系统自行决定)。在存储单元中的存储方式是:用整数的补码形式存放。在存放整数的存储单元中,最左面一位是用来表示符号的。
如果该位为0,表示该数值为正;如果该位为1,表示该数值为负。
(2)短整型(short)
类型说明符为short int或short。所占字节和存储的方式均与基本型(int)相同。
(3)长整型(long)
类型说明符为short longt或long。
(4)双长整型(long long)
类型名为long long int 或 long long ,一般分配8个字节。这是C99新增的类型,但许多C编译系统尚未实现。
注意:C标准没有具体规定各种类型数据所占用单元的长度,这是有各编译系统自行决定的。C标准只是要求long型数据长度不短于int型,short型不长于int型。即:
sizeof(short)<=sizeof(int)<=sizeof(long)<=sizeof(long long)
sizeof是测量类型或变量长度的运算符。
2.2.2 字符型数据
字符型(Character)数据是不具计算能力的文字数据类型,它包括中文字符、英文字符、数字字符和其他ASCII字符,其长度(即字符个数)范围是0-255个字符,即0x00至0xFF。
在C语言中,指定用一个字节(8位)存储一个字符,此时,字节中的第一位置为0.
注意:字符'1'和整数1 是不同的概念。字符'1'只是代表一个形状为'1'的符号,在需要时按原样输出,在内存中以ASCII码形式存储,占一个字节;而整数1是以整数存储方式(二进制补码方式)存储的,占两个字节或者四个字节。
2.2.3 浮点型数据
浮点型数据是用来表示具有小数点的实数的。浮点型数据包括float(单精度浮点型)、double(双精度浮点型)、long double(长双精度浮点型)。
(1)float(单精度浮点型)
编译系统为每一个float型变量分配4个字节,数值以规范化的二进制数指数形式存放在存储单元中。在存储时,系统将实型数据分成小数部分和指数部分两个部分,分别存放。
由于用二进制形式表示一个实数以及存储单元的长度是有限的,因此不可能得到完全精确的值,只能存储成有限的精准度。
(2)double(双精度浮点型)
为了扩大能表示的数值范围,用8个字节存储一个double型数据,可以得到15位有效数字。为了提高运算精度,在C语言中进行浮点数的算术运算时,将float型数据都自动装换为double型,然后进行计算。
3.1 怎样确定常量的类型
在C语言中,不仅变量有类型,常量也有类型。为什么要把常量分为不同的类型呢?在程序中出现的常量是要存放在计算机中的存储单元中的。这就必须确定分配给它多少字节,按什么方式存储。
确定常量的类型,从常量的表示形式即可判定其类型。对于字符常量很简单,只要看到由单撇号括起来的单个字符或转义字符就是字符常量。对于数值常量按以下规律。
3.1.1 整型常量
整型常量就是通常的整数,包括正整数、负整数和0,其数据类型显然是整型。除此之外,整型常量包括短整型、长整型和无符号型等不同类型。不带小数点的数值是整型常量 ,但应注意其有效范围。
3.1.2 浮点型常量
凡以小数形式或指数形式出现的实数,是浮点型常量,在内存中都以指数形式存储。如:10是整型常量,10.0是浮点型常量。对浮点型常量,C编译系统把浮点型常量都按双精度处理,分配8个字节。
注意:C程序中的实型常量都是双精度浮点型常量。
可以在常量的末尾加专用字符,强制指定常量的类型。如在3.14159后面加字母F或f,就表示是float型常量,分配4分字节。
要注意区分类型和变量:
每一个变量都属于一个确定的类型。类型是变量的一个重要属性。变量是占用存储单元的,是具体存在的实体,在其占用存储单元中可以存放数据。而类型是变量的共性,是抽象的,不占用存储单元,不能用来存放数据。
以上内容是以谭浩强老师的第五版《C程序设计》为基础,参照网络资源及个人学习笔记,梳理完成。