第3讲 常量、变量与标志符 整型、实型、字符型数据

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5.整型常量的类型
在程序中出现一个整型常量,也应该是上述6种类别当 中的一种,C语言会自动按以下5种情况分别进行处理。 (1) 数值在-32768~32767的范围内的常量是int型。 ( 2 )超过上述范围,但在 -2147483648~2147483647 的范 围内,则认为它是long int型。再超则当实型处理。 (3)标准C语言的int与short int等同。 (4)整型常量没有无符号的类型。但整型常数可以直接 赋值给无符号类型的整型变量,只要常数的数值不超过 无符号整型变量的取值范围即可。 ( 5 ) C 语言允许在一个整型常数后面加上字符 L (或 l ) 表示一个长整型的数据,如 100L 为十进制长整型常量, 0X100L为十六进制长整型常量。
2.整型变量
整型变量可以分为基本整型、短整型、长整型和无符号 整型四种。本节只介绍基本整型的变量。 C语言规定在程序中所有要用到的变量,在使用前必须先 指定其类型,即对变量进行“定义”或者说明。 基本整型的变量用类型名关键字int 进行定义,定义形 式如下: int k; /*定义变量k为整型变量*/ int x1, x2, x3; /*定义变量x1, x2和x3均为整型变量*/ 一般微机都会为每个已定义的基本整型的变量在内存 中开辟2个连续的存储单元,一个存储单元可以存放8位的 二进制信息,一个基本整型的变量中具有16位的二进制信 息,其中的最高数值位为符号位,它所能表示的数值范围 为:-32768~32767。
±(10-38~1038 ) ±(10-308~10308 )
有效数 字位数 7 15~16
双精度 double
在大多数C编译系统中,将实型常量都作为双精度型 来处理。例如: float a; double b; a=111111.111; /*最后两位小数不起作用*/ b=111111.111;
4. 实型数据在内存中的存储形式
2.3 整型数据
整型数据包括整型常量和整型变量。
1.整型常量
(1) 十进制形式,如:100,0,-100 (2) 八进制形式,以数字0开头的八进制数 ,如: 0157 ,即(157)8,其对应的十进制数值为: 1×82+5×81+7×80,即111。八进制数中的数位符 号只能有8 个,即0~7。 (3) 十六进制形式,以数字字母0x开头的十六进制数, 如:0x157表示十六进制数157 ,即(157)16,其对 应的十进制数值为:1×162+5×161+7×160,即343。 十六进制数中的数位符号为数字字符0~9和英文字 母A~F等16个字符。 C语言自动按常量的范围决定其类型。同时允许用户在整 型常量后面加上字符L(或l)表示长整型数据
2.4 实型数据
1. 实型常量
–十进制小数形式,如:100.0、0.5、-10.8等,注 意实型常量中必须要有一个小数点 –指数形式,如:100e5表示100×105,注意字母E (或e)之前必须有数字,且E(或e)后面的指数必 须为整数,如E5、1.5e3.8、1e等都是不合法的指 数形式 –规范化的指数形式 字母E(或e)之前的小数部分, 其小数点之前必须有且只能有一位非零的数值。 如:3.58759E2
例2.1 符号常量的使用
• 符号常量必须先定义, 例2.1:符号常量的使用 #define PI 3.14159 后使用。 main( ) • 定义格式为:
#define 常量名 字符串
• 习惯上用大写字母来 标识符号常量,用小Байду номын сангаас写字母来标识变量或 函数。
{float r, l, area; r=3.5; l=2*PI*r; area=PI*r*r; printf(“l=%f, area=%f\n”, l, area); }
1. 字符常量
• 字符常量是用单引号(即撇号)括起来的单个字符,如: 'A'、'6' • 转义字符 就是一个反斜杠字符,后跟另一个普通字符 或若干个数字字符,把它们作为一个整体,用来代替某 一个特殊的字符,例如'\n'代表一个“换行”符 • 反斜杠字符的含义已经被转换为“转义字符”的标志字 符,如果要在程序中用到反斜杠字符本身,则不能直接 用'\',而应该用'\\'。 • '\ddd' 或'\ xhh'是一个转义字符的通用形式,可以用它 表示ASCII码字符集里的每一个字符。其中的三位八进 制常量或两位十六进制常量为某个字符在ASCII码字符 集里的编号,即ASCII码值
2.5 字符型数据
• 类型名 char • 字符型数据存储ASCII字符集中的一个字符,占 用1个字节的存储单元,实际存储的是该字符的 ASCII值。 • 字符型数据的存储形式与整数的存储形式类似, 所以在C语言中可以把字符型的数据当作整型数 使用,其数值范围为:-128~ 127 • 可以定义无符号的字符变量,其数值范围为: 0~255,定义形式如下: unsigned char c; /*说明变量c为无符号字符型变量*/
3. 整型数据分类
类型
基本整型
短整型 长整型
类型名
int
short int或 short long int或 long
符号 类型
最高位
最高位 最高位
类型名
unsigned int
unsigned short
符号


无符号 整型
无符号 短整型 无符号 长整型
unsigned long 无
• 无符号型数据和其相应的有符号型数据占用相同的存储空间 • 不同的C语言处理系统对这几类整型数所占用的字节数和数值范围 有不同规定,只要求长整型(long)数据所占字节数不少于基本整 型(int),短整型(short)不多于基本整型 • 标准C基本整型占2个字节,VC基本整型占4个字节
第3讲
常量、变量与标志符 整型、实型、字符型数据
2.2 常量、变量与标识符
1. 常量
• 在源程序中明确指明,在程序运行前就知道,而 且在程序运行过程中不会发生变化。 • 常量类型: – 整型常量,如:123、-321、0 – 实型常量,如:12.3、2.0 – 字符常量,如:’a’、’b’、’7’、’#’ –符号常量,用一个标识符来代表,其值在其 作用域内不能改变,也不能被赋值,一般在程 序中需要多次使用某个常量时使用。
main() {float x1, x2; x1=288.4; /*有效位数不多,但会产生转换误差*/ x2=1234567891.0; /*有效位数太多,会产生存储误差*/ printf("x1=%f\n", x1); printf("x2=%f\n", x2); } 程序的运行结果为: x1=288.399994 x2=1234567936.000000
2. 变量
• 在程序运行过程中其值可以在一定范围内变化 • 在计算机的内存中占据一定的存储单元,在相应 的存储单元中存放着变量的值。 • 变量名:用来标识一个变量的标识符,也就是变 量的名字。习惯上变量名用小写字母表示,以增 加其直观性和可读性。 • 变量值:变量的值,即在变量的存储单元中存放 的数值。 • C语言规定在程序中所有要用到的变量在使用前 必须先指定其类型,称为变量定义或变量说明。
表2.1 C语言中各种整型数据的长度及取值范围
4.整型数据在内存中的存储形式
在计算机中,每一种数据类型的数据位数都是固定不变 的,所以每一种数据类型都有它的取值范围,在进行算术 运算的过程中,如果运算结果超出了它的取值范围,就会 得到一个错误的运算结果,这种情况称为溢出。 标准C语言的基本整型的数据都是十六位的,其中的最 高位(即最左边的一位)用来存放整数的符号,若是正整数, 最高位为0,若是负整数,最高位为1。因此,从最高位就 立刻能判别出存储器中存放的一个整数是正整数还是负整 数。 例如整数5,其在内存中的二进制码为: 0000000000000101。 正整数的这种存储形式,称为“原码形式”的机器数。
2. 实型变量及其定义
C 语言中的实型变量分为单精度型和 双精度型两种,分别用保留关键字 float和double进行定义。
例如:float
double
x,y;/*说明变量x,y为单精度实型*/
z;
/*说明变量z为双精度实型*/
3. 实型数据分类
类型 单精度 类型名 float 存储 数值范围 空间 4 8
3. 标识符
• C语言中,标识符可以用作变量名、符号名、函 数名和后面将要学到的数组名、文件名以及一些 具有专门含义的名字。 • 合法的标识符只能由字母、数字和下划线等三种 字符组成,并且第一个字符必须为字母或下划线。 • 在C语言的标识符中,大写字母和小写字母是两 个不同的字符, • 对于标识符的长度,一般的计算机系统规定取前 8个字符有效,如果长于8个字符,多余的字符 将不被识别。有些系统允许取较长的名字,读者 在取名时应当了解所用系统的具体规定。
补码转换成原码
如果要把内存中以补码形式存放的二进制数转换成十进制 的整数,也要先将其补码转换成原码,转换方法同上,然后 再将原码转换成十进制的整数。 如-5的补码为:1111111111111011,将其数值位按位取反, 得到的结果为 1000000000000100 ,再将其数值位加上 1 ,即 得到-5的原码为:1000000000000101。 由以上分析可知,由两个字节存放的最小整数是 1000000000000000,它的十进制数为-32768;而-1的二进制 码为1111111111111111;最大整数是0111111111111111,它 的十进制数为32767。读者可按以上步骤进行换算。 对于无符号的整数,其中的最高位不再用来表示符号,16 个二进制位全部用来存放数值,当其16个二进制位中全部都 是0时,其对应的十进制数值为0;当其16个二进制位中全部 都是1时,其对应的十进制数值为65535。
实型数据在内存中是按照指数的形式来存储的。如图 2.2所示。
由于实型数据在内存中的存储位数是固定的,也是有 限的,所以实型数据的精度不是很高,所能表示的数据 范围也是有限的。而且由于实型数据的存储形式比较复 杂,计算机在进行算术运算时的处理速度也比较慢。
5.实型数据的误差
由于用来存储实型数据的存储单元的位数有限,所以有效 位数以外的其它数字位被舍去了。这种误差叫做存储误差。 此外,在将十进制数转换成二进制数时,有时也会产生误差, 即转换误差。 例2.2 实型数据的误差
标识符的分类
• C语言的标识符可以分为以下三类。
–关键字 C语言规定的一批标识符,它们在程序中都 代表着固定的含义,不能另作它用。 –预定义标识符 在C语言中也都有特定的含义,允许 另作它用,但这将使这些标识符失去系统规定的原意。 –用户标识符 用户根据需要定义,一般用来给变量、 函数、数组或文件等命名。除要遵循标识符的命名规 则外,还应注意做到“见名知义”,即选择的用户标 识符应具有相关含义,以增加程序的可读性。 –如果用户标识符与关键字相同,程序在编译时将给出 出错信息,如果与预定义标识符相同,系统并不报错, 只是该预定义标识符将失去原定含义,代之以用户确 认的含义,可能会引发一些运行时的错误。
计算机中的数都是用补码表示的 所谓原码是指一个数的最高位为符号位,其余的数位均 为数值位,数值位的值即为该数所对应的二进制数的值。 如十进制数+5的原码为:0000000000000101; 十进制数-5的原码为:1000000000000101。 计算机中的数都是用补码表示的机器数。一个正数的补 码和其原码的形式完全相同;而一个负数的补码也是在其 原码的基础上转换出来的。转换方法分两步进行: (1) 将负数的原码中的数值位按位取反,得到该数的反 码。取反操作就是把1转换成0,把0转换成1。如-5的反码 为:1111111111111010。 (2) 在所求得的反码的数值部分的最低位再加上1,即 得到该数的补码。 如-5的补码为:1111111111111011。
2. 字符串常量
• C语言中的字符串常量是用一对双引号括起来的 字符序列。字符串常量中的字符序列可以由任意 多个字符组成,如:"a"、"ab"、""、"250"、 "good morning" • 字符串""称为空串,由两个连续的双引号组成 • C语言规定在每一个字符串的结尾都加上一个字 符'\0',作为字符串的结束标志
相关文档
最新文档