1. 基本数据类型:基本数据类型最主要的特点是,其值不可以再分解为其它类型。也就是
说,基本数据类型是自我说明的。 2. 构造数据类型:构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义 的。也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”。每个“成员” 都是一个基本数据类型或又是一个构造类型。在C 语言中,构造类型有以下几种: ·数组类型 ·结构体类型 ·共用体(联合)类型 3. 指针类型:指针是一种特殊的,同时又是具有重要作用的数据类型。其值用来表示某个 变量在内存储器中的地址。虽然指针变量的取值类似于整型量,但这是两个类型完全不 数值是以补码表示的: 码相同; 值的二进制形式按位取反再加 1。 0 的补码: 0 0 0 0 0 0 0 0 0 0 1 0 1 0 正数的补码和原 负数的补码:将该数的绝对 例如: 求-1 10 的原码: 0 0 取反: 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 再加1, -1 1 1 1 1 1 1 1 0 1 1 0 得0 的补码: 1 1 1 1 1 由此可知左第符。 2. 整型 符为int,在内存中占2 个字节。 取值范围均与基本型相同。 成: t 或unsigned。 符号类型量相同。但由于省去了符 表示32767 1 1 1 1 1 1 1 1 1 1 , 面的一位是表示号的 变量的分类 1) 基本型:类型说明 2) 短整量:类型说明符为 short int 或short。所占字节和 3) 长整型:类型说明符为 long int 或long,在内存中占4 个字节。 4) 无符号型:类型说明符为 unsigned。 无符号型又可与上述三种类型匹配而构 无符号基本型:类型说明符为 unsigned in 无符号短整型:类型说明符为 unsigned short。 无符号长整型:类型说明符为 unsigned long。 各种无符号类型量所占的内存空间字节数与相应的有 号位,故不能表示负数。 有符号整型变量:最大 0 1 1 1 1 1 无符号整型变量:最大表示5 1 1 1 1 1 1 1 1 1 1 65 35 1 1 1 1 1 1 下表列出了Turbo C 中各类整型量所分配的内存字节数及数的表示范围。 类型说明符 数的范围 字节数 int -32768~32767 即-215~(215-1) 2 unsigned int 0~65535 即0~(216-1) 2 short int -32768~32767 即-215~(215-1) 2 unsigned short int 0~65535 即0~(216-1) 2 long int -2147483648~2147483647 即-231~(231-1) 4 unsigned long 0~4294967295 即0~(232-1) 4 以 13 为例: int 型: 00 00 00 00 00 00 11 01 short int 型: 00 00 00 00 00 00 11 01 long int 型: 同的量,因此不能混为一谈。
4. 空类型:在调用函数值时,通常应向调用者返回一个函数值。这个返回的函数值是具有 一定的数据类型的,应在函数定义及函数说明中给以说明,例如在例题中给出的max 函数定义中,函数头为:int max(int a,int b);其中“int ”类型说明符即表示该函数的返 回值为整型量。又如在例题中,使用了库函数sin,由于系统规定其函数返回值为双精 度浮点型,因此在赋值语句s=sin (x);中,s 也必须是双精度浮点型,以便与sin 函数的 返回值一致。所以在说明部分,把s 说明为双精度浮点型。但是,也有一类函数,调用 后并不需要向调用者返回函数值,这种函数可以定义为“空类型”。其类型说明符为void。 在后面函数中还要详细介绍。 在本章中,我们先介绍基本数据类型中的整型、浮点型和字符型。其余类型在以后各章 中陆续介绍。 3.2 常量与变量 对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。在程序执行过程中, 其值不发生改变的量称为常量,其值可变的量称为变量。它们可与数据类型结合起来分类。 例如,可分为整型常量、整型变量、浮点常量、浮点变量、字符常量、字符变量、枚举常量、 枚举变量。在程序中,常量是可以不经说明而直接引用的,而变量则必须先定义后使用。 整型量包括整型常量、整型变量。 3.2.1 常量和符号常量 在程序执行过程中,其值不发生改变的量称为常量。 直接常量(字面常量): 整型常量:12、0、-3; 实型常量:4.6、-1.23; 字符常量:'a’、'b’。 标识符:用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符 序列。 符号常量:用标示符代表一个常量。在C语言中,可以用一个标识符来表示一个常量, 称之为符号常量。 符号常量在使用之前必须先定义,其一般形式为: #define 标识符常量 其中#define 也是一条预处理命令(预处理命令都以"#"开头),称为宏定义命令(在 后面预处理程序中将进一步介绍),其功能是把该标识符定义为其后的常量值。一经定 义,以后在程序中所有出现该标识符的地方均代之以该常量值。 习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。 【例 3.1】符号常量的使用。 #define PRICE 30 main() { int num,total; num=10; total=num* PRICE;
printf(“total=%d”,total); } 用标识符代表一个常量,称为符号常量。 符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。 使用符号常量的好处是: 含义清楚; 能做到“一改全改”。 3.2.2 变量 其值可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。 变量定义必须放在变量使用之前。一般放在函数体的开头部分。要区分变量名和变量值是两 个不同的概念。 3.3 整型数据 3.3.1 整型常量就是整常数。在C语言中,使用的整常数有八进制、十六进制和十进制三 种。 ) 十进制整常数:十进制整常数没有前缀。其数码为 0~9。 常数: 制数码)。 在程序中是根据前缀来区分各种进制数的。因此在书写常数时不要把前缀弄错造成结果 不正确。 2) 八进制整常数:八进制整常数必须以0 开头,即以0 作为八进制数的前缀。数码取 a 变量名 3 变量值 存 储 单 元 整型常量的表示方法 1 以下各数是合法的十进制整常数: 237、-568、65535、1627; 以下各数不是合法的十进制整 023 (不能有前导0)、23D (含有非十进 值为0~7。八进制数通常是无符号数。 第 39 页 以下各数是合法的八进制数:
015(十进制为13)、0101(十进制为65)、0177777(十进制为65535); 以下 进制数码)、-0127(出现了负号)。 3) 十 9,A~F 或 数是合法的十六进制整常数: 制为 160)、0XFFFF (十进制为65535); 以下 数码)。 4) 的长度也为 16 位,因此表示的 整常数: 158)、358000L (十进制为358000); 八进 10)、077L (十进制为63)、0200000L (十进制为65536); 十六进制长整常数: 21)、0XA5L (十进制为165)、0X10000L (十进制为65536)。 长整 C编 或“u”。 u,0x38Au,235Lu 均为无符号数。 前缀,后缀可同时使用以表示各种类型的数。如 0XA5Lu 表示十六进制无符号长 整数 3.3.2 整型变量 1. 整型数据在内存中的存放形式 i 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 各数不是合法的八进制数: 256(无前缀0)、03A2(包含了非八 六进制整常数:十六进制整常数的前缀为0X 或0x。其数码取值为0~ a~f。 以下各 0X2A(十进制为42)、0XA0 (十进 各数不是合法的十六进制整常数: 5A (无前缀0X)、0X3H (含有非十六进制 整型常数的后缀:在16 位字长的机器上,基本整型 数的范围也是有限定的。十进制无符号整常数的范围为0~65535,有符号数为 -32768~+32767。八进制无符号数的表示范围为0~0177777。十六进制无符号数 的表示范围为0X0~0XFFFF 或0x0~0xFFFF。如果使用的数超过了上述范围,就 必须用长整型数来表示。长整型数是用后缀“L”或“l”来表示的。 例如: 十进制长 158L (十进制为 制长整常数: 012L (十进制为 0X15L (十进制为 数158L 和基本整常数158 在数值上并无区别。但对158L,因为是长整型量, 译系统将为它分配4 个字节存储空间。而对158,因为是基本整型,只分配2 个字 节的存储空间。因此在运算和输出格式上要予以注意,避免出错。 无符号数也可用后缀表示,整型常数的无符号数的后缀为“U” 例如: 358 A5,其十进制为165。 如果定义了一个整型变量i: int i; i=10; 10 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
第 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 01 unsigned int 型: 00 00 00 00 00 00 11 01 unsigned short int 型: 00 00 00 00 00 00 11 01 unsigned long int 型: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 01 3. 整型变量的定义 变量定义的一般形式为: 类型说明符 变量名标识符,变量名标识符,...; 例如: int a,b,c; (a,b,c 为整型变量) long x,y; (x,y 为长整型变量) unsigned p,q; (p,q 为无符号整型变量) 在书写变量定义时,应注意以下几点: 允许在一个类型说明符后,定义多个相同类型的变量。各变量名之间用逗号间隔。 类型说明符与变量名之间至少用一个空格间隔。 最后一个变量名之后必须以“;”号结尾。 变量定义必须放在变量使用之前。一般放在函数体的开头部分。 【例 3.2】整型变量的定义与使用。 main() { int a,b,c,d; unsigned u; a=12;b=-24;u=10; c=a+u;d=b+u; printf(“a+u=%d,b+u=%d\n”,c,d); } 4. 整型数据的溢出 【例 3.3】整型数据的溢出。 main() { int a,b; a=32767; b=a+1; printf("%d,%d\n",a,b); } 32767: 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 第42 页 -32768
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 【例3.4】 main(){ long x,y; int a,b,c,d; x=5; y=6; a=7; b=8; c=x+a; d=y+b; printf("c=x+a=%d,d=y+b=%d\n",c,d); } 从程序中可以看到:x, y 是长整型变量,a, b 是基本整型变量。它们之间允许进行运算, 运算结果为长整型。但c,d 被定义为基本整型,因此最后结果为基本整型。本例说明,不 同类型的量可以参与运算并相互赋值。其中的类型转换是由编译系统自动完成的。有关类型 转换的规则将在以后介绍。 3.4 实型数据 3.4.1 实型常量的表示方法 实型也称为浮点型。实型常量也称为实数或者浮点数。在C语言中,实数只采用十进 制。它有二种形式:十进制小数形式,指数形式。 1) 十进制数形式:由数码 0~ 9 和小数点组成。 例如: 0.0、25.0、5.789、0.13、5.0、300.、-267.8230 等均为合法的实数。注意,必须有小数点。 2) 指数形式:由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符 号)组成。 其一般形式为: a E n(a 为十进制数,n 为十进制整数) 其值为 a*10n。 如: 2.1E5 (等于2.1*105) 3.7E-2 (等于3.7*10-2) 0.5E7 (等于0.5*107) -2.8E-2 (等于-2.8*10-2) 以下不是合法的实数: 345 (无小数点) 第43 页 E7 (阶码标志E 之前无数字)
-5 (无阶码标志) 53.-E3 (负号位置不对) 2.7E (无阶码) 标准C允许浮点数使用后缀。后缀为“f”或“F”即表示该数为浮点数。如356f 和356. 是等价的。 【例 3.5】说明了这种情况。 main(){ printf("%f\n ",356.); printf("%f\n ",356); printf("%f\n ",356f); } |
|