2.2 整型常量与变量

2.2.1 常量与变量的概念

所谓常量是指在程序运行过程中其值不能改变的量。在C语言中常量分为:整型常量、实型常量、字符常量、字符串常量和符号常量。如:15是整型常量,3.14159是实型常量,'a'是字符常量,"abc123"是字符串常量,符号常量将在2.4节中介绍,前四种常量称为直接常量。

变量是指在程序运行过程中其值可以改变的量。如:y=2x+3中的x和y都可以看作是变量。变量实质上就是内存中的一个存储单元,在程序中对某个变量的操作实际上就是对这个存储单元的操作,在程序中使用变量要注意以下几个方面。

①用户定义的变量名字要符合标识符的命名规则;

②程序中的所有变量必须先定义后使用;

③变量定义的位置应该在函数体内的前部、复合语句的前部或函数的外部;

④在定义变量的同时要说明其类型,系统在编译时根据其类型为其分配相应的存储单元。

上述定义C语言变量时的注意事项恰恰符合我们做事的规律,就像如果要很好地完成一项任务我们要做许多准备工作一样,准备工作做得好,完成任务时就非常顺利!

2.2.2 整型常量

整型常量即整数,按照不同的进制区分,整数有三种表示形式。

①十进制:以非0开始的数,数码取值范围是0~9,可以是正数、负数,如25、-36、+23等。

②八进制:以0开始的数,数码取值为0~7,如037、0123等。

③十六进制:以0x或0X开始的数,数码取值为0~9、A~F或a~f,如0x2a、0Xad、0x123等。

注意:在C语言中只有十进制可以是负数,八进制和十六进制只能是正数。

另外,可以在一个整型常数的后面添加一个L或l字母,来说明该数是长整型数,如25L、037l、0x3dl等。还可以在一个整型常数的后面添加一个U或u字母,来说明该数是无符号整型数,如25U、037u、0x3du等。

2.2.3 整型变量

(1)整型变量的分类

整型变量分为以下四种类型:

基本型:以int表示,在内存中占2个字节(在VC++环境下占4个字节)。

短整型:以short int或short表示,所占字节和取值范围均与基本型相同(在VC++环境下占2个字节)。

长整型:以long int或long表示,在内存中占4个字节。

无符号型:以unsigned表示。

无符号型又可与上述三种类型匹配而构成:

①无符号基本型:类型说明符为unsigned int或unsigned。

②无符号短整型:类型说明符为unsigned short。

③无符号长整型:类型说明符为unsigned long。

各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同,但由于省去了符号位,故不能表示负数。如图2.2所示为整型数据在内存中的存放方式。

../images/image9.jpeg

图2.2 整型数据在内存中的存放方式

有符号短整型变量:能够存储的最大数值32767,最小数值-32768。

无符号短整型变量:能够存储的最大数值65535,最小数值0。

不同的编译系统或计算机系统对这几类整型数据所占用的字节数有不同的规定。表2.1列出了在VC++环境下各类整型变量所分配的内存字节数及数的表示范围。

表2.1 在VC++中定义的整型变量所占的内存字节数和数的范围

注:[ ]里的内容可以省略。

如果在定义整型变量时不指定(unsigned),则隐含为有符号(signed)。

(2)整型变量的定义

变量定义的一般形式为:

变量的存储类别 变量的类型名,变量名的标识符,…;

例如:

auto int a,b,c;        /*定义三个动态的整型变量*/

static long x,y;        /*定义两个静态的长整型变量*/

regisiter unsigned p,q;         /*定义两个寄存器型的无符号整型变量*/

在进行变量定义时,应注意以下几点:

①允许在一个类型说明符后,定义多个相同类型的变量。各变量名之间用逗号间隔。类型说明符与变量名之间至少用一个空格间隔。

②最后一个变量名之后必须以“;”号结尾。

③变量定义必须放在变量使用之前。一般放在函数体的开头部分、复合语句的开头部分或函数体外。

④“变量的存储类别”可以省略,当省略时默认的存储类别是auto型。

【例2.1】  整型变量的定义与使用。

#include<stdio.h>

void main()

{ int x,y,z;         /*定义三个整型变量*/

  x=3;         /*变量x的值为3*/

  y=5;         /*变量y的值为5*/

  z=(x+y)*10;         /*计算表达式的值,然后赋给变量z*/

  printf("z=%d\n",z);         /*输出z的值*/

}

运行结果:

z=80