大学计算机C语言_第1页
大学计算机C语言_第2页
大学计算机C语言_第3页
大学计算机C语言_第4页
大学计算机C语言_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 -2- 第第2 2章章 数据类型与表达式数据类型与表达式 本本 章章 内内 容容 1. C语言的数据类型语言的数据类型 2. 常量和变量常量和变量 3. 整型数据整型数据 4. 实型数据实型数据 5. 字符型数据字符型数据 6. 系统函数系统函数 7. C运算符概述运算符概述 8. 算术运算符算术运算符 9. 关系运算符和逻辑运算符关系运算符和逻辑运算符 10. 位运算符与长度运算符位运算符与长度运算符 11. 赋值运算符和赋值表达式赋值运算符和赋值表达式 12. 逗号运算符和逗号表达式逗号运算符和逗号表达式 13. 运算符的优先级与表达式的分类运算符的优先级与表达式的分类 -3- 第第2

2、2章章 数据类型与表达式数据类型与表达式 2.1 C语言的数据类型语言的数据类型 数据类型是一个值的集合和定义在这个值集上的一组操作的总称。数据类型是一个值的集合和定义在这个值集上的一组操作的总称。 数据类型明显或隐含地规定了在程序执行期间变量或表达式所有可能的取数据类型明显或隐含地规定了在程序执行期间变量或表达式所有可能的取 值范围,以及在这些值上允许进行的操作。值范围,以及在这些值上允许进行的操作。 C C语言的各种数据类型:语言的各种数据类型: 基本类型基本类型 数据类型数据类型 字符型字符型 整型整型 实型实型 双精度实型双精度实型 枚举类型枚举类型 构造类型构造类型 指针类型指针类型

3、 空类型空类型 数组类型数组类型 结构体类型结构体类型 共用体类型共用体类型 -4- 第第2 2章章 数据类型与表达式数据类型与表达式 2.2 常量和变量常量和变量 常量和符号常量常量和符号常量 1 1常量常量 在程序运行过程中,其值不能被改变的量称为常量,又叫常数。在程序运行过程中,其值不能被改变的量称为常量,又叫常数。 常量区分为不同的类型,如常量区分为不同的类型,如100100,0 0,-8-8为整型常量,为整型常量,25.3225.32,0.1420.142 为实型常量,为实型常量,AA,BB是字符型常量。是字符型常量。 常量不需要事先定义,只在程序中需要的地方直接写出即可。常量常量不

4、需要事先定义,只在程序中需要的地方直接写出即可。常量 的类型也不需要事先说明,它们的类型是由书写方式自动默认的。的类型也不需要事先说明,它们的类型是由书写方式自动默认的。 2 2符号常量符号常量 用一个符号(标识符)代表一个常量,例如:用一个符号(标识符)代表一个常量,例如: #define MAXNUM 1000#define MAXNUM 1000 #define TRUE 1 #define TRUE 1 #define FALSE 0 #define FALSE 0 符号常量的定义格式如下:符号常量的定义格式如下: #define #define 符号常量符号常量 常量常量 -5- 第

5、第2 2章章 数据类型与表达式数据类型与表达式 2.2 常量和变量常量和变量 标识符与变量标识符与变量 1 1标识符标识符 在在C C 语言中,标识符是对变量、符号常量、函数、数组、文件等用语言中,标识符是对变量、符号常量、函数、数组、文件等用 户定义对象的命名。户定义对象的命名。 标识符可以是一个或多个字符。标识符的第一个字符必须是英文字标识符可以是一个或多个字符。标识符的第一个字符必须是英文字 母或下画线,随后的字符必须是字母、数字或下画线。不能以数字打母或下画线,随后的字符必须是字母、数字或下画线。不能以数字打 头。头。 下面是一些正确或错误标识符命名的示例。下面是一些正确或错误标识符命

6、名的示例。 正确标识符正确标识符 错误标识符错误标识符 weight 2xweight 2x length a|#b length a|#b color2 red!color color2 red!color save _$123 save _$123 -6- 第第2 2章章 数据类型与表达式数据类型与表达式 2.2 常量和变量常量和变量 2 2变量变量 在程序运行过程中,其值可以改变的量称为变量。在程序运行过程中,其值可以改变的量称为变量。 在在C C语言中,要求对所有用到的变量语言中,要求对所有用到的变量 “先定义,后使用先定义,后使用”。 例如:定义两个整型变量例如:定义两个整型变量a

7、a、b b和三个实型变量和三个实型变量x x、y y、z z。 int a,b;int a,b; float x,y,z; float x,y,z; C C语言有五种基本数据类型:字符型、整型、实型、双精度实型、语言有五种基本数据类型:字符型、整型、实型、双精度实型、 和空类型。定义这五种类型的变量时须使用的类型说明符分别为和空类型。定义这五种类型的变量时须使用的类型说明符分别为 charchar、intint、floatfloat、doubledouble和和voidvoid。 -7- 第第2 2章章 数据类型与表达式数据类型与表达式 2.3 整型数据整型数据 整型常量整型常量 1 1不同进

8、制数的使用不同进制数的使用 十进制整数的表示与通常在算术中的表示一样,例如:十进制整数的表示与通常在算术中的表示一样,例如:321321,+321+321。 八进制整数必须以数字八进制整数必须以数字0 0开头,例如:开头,例如:01230123表示表示(123)(123)8 8。 十六进制整数必须以十六进制整数必须以0 x0 x开头,例如开头,例如0 x123 0 x123 表示表示(123)(123)16 16。 。 -8- 第第2 2章章 数据类型与表达式数据类型与表达式 2.3 整型数据整型数据 整型变量整型变量 1 1整型数据在内存中的存放形式整型数据在内存中的存放形式 在计算机中,数

9、是用二进制表示的,把一个数连同其符号在计算机在计算机中,数是用二进制表示的,把一个数连同其符号在计算机 中加以数值化,这样的数称为机器数,机器数可以用不同的码制(原中加以数值化,这样的数称为机器数,机器数可以用不同的码制(原 码、补码)表示。码、补码)表示。 2 2整型变量的分类整型变量的分类 根据数值的范围将整型变量分为以下六种类型:根据数值的范围将整型变量分为以下六种类型: 有符号基本整型:有符号基本整型:signed intsigned int。 有符号短整型:有符号短整型:signed short intsigned short int。 有符号长整型:有符号长整型:signed lo

10、ng intsigned long int。 无符号基本整型:无符号基本整型:unsigned intunsigned int。 无符号短整型:无符号短整型:unsigned short intunsigned short int。 无符号长整型:无符号长整型:unsigned long intunsigned long int。 -9- 第第2 2章章 数据类型与表达式数据类型与表达式 2.3 整型数据整型数据 类类 型型占占 字字 节节 数数取取 值值 范范 围围 intint2 2字节字节-32768-327683276732767 shortshort2 2字节字节-32768-327

11、683276732767 longlong4 4字节字节-2147483648-214748364821474836472147483647 unsigned intunsigned int2 2字节字节0 06553565535 unsigned shortunsigned short2 2字节字节0 06553565535 unsigned longunsigned long4 4字节字节0 042949672954294967295 ANSI标准定义的整数类型标准定义的整数类型 -10- 第第2 2章章 数据类型与表达式数据类型与表达式 2.3 整型数据整型数据 3.3.不同类型的整型常

12、量赋值给整形变量不同类型的整型常量赋值给整形变量 整型变量可分为整型变量可分为intint、short intshort int、long intlong int、unsigned intunsigned int、 unsigned shortunsigned short、unsigned longunsigned long等类别,将整型常量赋值给上述类等类别,将整型常量赋值给上述类 别的整型变量时如何做到类型匹配?别的整型变量时如何做到类型匹配? 一个整型常数,若值在一个整型常数,若值在-32768-32768+32767+32767范围内,可将它赋值给范围内,可将它赋值给intint型型

13、和和long intlong int型变量。型变量。 一个整型常数,若值在一个整型常数,若值在-2147483648-2147483648+2147483647+2147483647范围内,可以赋范围内,可以赋 值给一个值给一个long intlong int型变量。型变量。 常量无常量无unsignedunsigned型。但一个非负值的整数可以赋值给型。但一个非负值的整数可以赋值给unsigned intunsigned int 型变量,只要它的范围在型变量,只要它的范围在0 06553565535范围内。范围内。 在一个整常数后面加一个小写字母在一个整常数后面加一个小写字母l l或大写字母

14、或大写字母L L,则认为是,则认为是longlong型型 常量。例如,常量。例如,-123l-123l、123L123L、0L0L、0775L0775L、0 x9EL0 x9EL等。等。 -11- 第第2 2章章 数据类型与表达式数据类型与表达式 2.3 整型数据整型数据 3. 3. 整型变量的定义整型变量的定义 对变量的定义,一般是放在一个函数的开头的声明部分。对变量的定义,一般是放在一个函数的开头的声明部分。 【例例2-12-1】 main() main() int a; int a; unsigned int b; unsigned int b; long c; long c; unsi

15、gned long d; unsigned long d; a=-100; a=-100; b=60000; b=60000; c=-2123456789; c=-2123456789; d=4123456789; d=4123456789; printf(a=%d,b=%u,c=%ld,d=%lu,a,b,c,d); printf(a=%d,b=%u,c=%ld,d=%lu,a,b,c,d); 运行结果为运行结果为 a=-100,b=60000,c=-2123456789,d=4123456789a=-100,b=60000,c=-2123456789,d=4123456789 -12- 第

16、第2 2章章 数据类型与表达式数据类型与表达式 2.4 实型数据实型数据 实型常量的表示方法实型常量的表示方法 实型常数也称为浮点数,在实型常数也称为浮点数,在C C语言中实型常数只使用十进制数表示,语言中实型常数只使用十进制数表示, 它的书写方式有两种:它的书写方式有两种: 小数形式。它是由整数、小数点、小数三部分组成,最多只能省略其小数形式。它是由整数、小数点、小数三部分组成,最多只能省略其 中的整数或小数部分,但不能二者都省略,也不能省略小数点。例如:中的整数或小数部分,但不能二者都省略,也不能省略小数点。例如: 123.123.,-.123-.123,1.231.23,-1.23-1.

17、23,12.012.0,0.0.,.0.0,0.00.0都是合法的十进制小都是合法的十进制小 数形式。数形式。 指数形式。它是由尾数、字母指数形式。它是由尾数、字母e e或或E E、指数三部分组成。尾数可以是一、指数三部分组成。尾数可以是一 个十进制小数形式,也可以是一个整数形式,个十进制小数形式,也可以是一个整数形式, 如如123e-3123e-3或或123E-3123E-3都代表都代表12312310-310-3的值。的值。 注意:注意:字母字母e e(或(或E E)之前必须有数字,且后面指数必须为整数,如)之前必须有数字,且后面指数必须为整数,如- - 0.32E-20.32E-2,2E

18、42E4,-.23E-2-.23E-2,.0E3.0E3,0.E-50.E-5,0E00E0等都是合法的指数形式,等都是合法的指数形式, 而而E-5E-5,.E2.E2,12.3E5.412.3E5.4却是非法的指数形式。却是非法的指数形式。 -13- 第第2 2章章 数据类型与表达式数据类型与表达式 2.4 实型数据实型数据 实型变量实型变量 1 1实型数据在内存中的存放形式实型数据在内存中的存放形式 实型数据是按指数形式存储的。系统把实型数据是按指数形式存储的。系统把 一个实型数据分成尾数部分和指数部分分别一个实型数据分成尾数部分和指数部分分别 存放。实型数据在内存中小数点位置不是固存放。

19、实型数据在内存中小数点位置不是固 定的,或者说是浮动的,故这种表示法称为定的,或者说是浮动的,故这种表示法称为 浮点表示法。浮点表示法。 2 2实型变量的定义实型变量的定义 对每一个实型变量都应在使用前加以定对每一个实型变量都应在使用前加以定 义。如义。如 float x,y;float x,y; 3 3实型数据的舍入误差实型数据的舍入误差 由于实型变量是由有限的存储单元组成由于实型变量是由有限的存储单元组成 的,因此能提供的有效数字总是有限的。在的,因此能提供的有效数字总是有限的。在 有效范围以外的数字将被舍去。由此可能会有效范围以外的数字将被舍去。由此可能会 产生一些误差。请分析下面的程序

20、:产生一些误差。请分析下面的程序: 【例例2-32-3】分析实型分析实型 数据的舍入误差。数据的舍入误差。 main()main() float a; float a; a=12345.6789; a=12345.6789; printf(n%f,a); printf(n%f,a); printf(n%e,a); printf(n%e,a); 在在Turbo CTurbo C中程序运中程序运 行结果为:行结果为: 12345.67871112345.678711 1.234568e+0021.234568e+002 -14- 第第2 2章章 数据类型与表达式数据类型与表达式 2.4 实型数据实

21、型数据 双精度型数据双精度型数据 1 1双精度常数双精度常数 双精度常数的书写方式与实型常数的书写方式相同,有十进制小数形双精度常数的书写方式与实型常数的书写方式相同,有十进制小数形 式和指数形式两种式和指数形式两种, ,比实型数据的范围广、精度高。比实型数据的范围广、精度高。 2 2双精度数据在内存中的表示形式双精度数据在内存中的表示形式 ANSIANSI并未具体规定每种类型数据的长度、精度和数值范围。并未具体规定每种类型数据的长度、精度和数值范围。 微机上常用的微机上常用的C C编译系统编译系统( (如如Turbo CTurbo C、MS CMS C、Borland C)Borland C

22、)实型数据:实型数据: 3 3双精度变量的定义双精度变量的定义 双精度类型标识符双精度类型标识符doubledouble前还可加修饰符前还可加修饰符longlong,long double long double 比比 doubledouble型的精度更高,表示的数值范围更大。型的精度更高,表示的数值范围更大。 类类 型型二进制位数二进制位数有有 效效 数数 字字数数 值值 范范 围围 floatfloat32326 67 71010-37 -37 101038 38 doubledouble6464151516161010-307 -307 1010308 308 long doublelo

23、ng double128128181819191010-4931 -4931 10104932 4932 -15- 第第2 2章章 数据类型与表达式数据类型与表达式 2.5 字符型数据字符型数据 字符常量字符常量 字符常量是用单引号(字符常量是用单引号( )括起来的单个字符。例如)括起来的单个字符。例如AA、!、 #、aa、 * * 等。等。 除字符常量外,将除字符常量外,将“”开头的特定字符串称为开头的特定字符串称为“转义字符转义字符”,意,意 思是将反斜杠后面的字符串转换成另外的意义。思是将反斜杠后面的字符串转换成另外的意义。 转义字符转义字符 含含 义义ASCII代码(十进制)代码(十进

24、制) n换行,将当前位置移到下一行开头换行,将当前位置移到下一行开头10 t水平制表(跳到下一个水平制表(跳到下一个Tab位置)位置)9 b退格,将当前位置移到前一格退格,将当前位置移到前一格8 r回车,将当前位置移到本行开头回车,将当前位置移到本行开头13 反斜杠字符反斜杠字符“”92 单引号字符单引号字符39 双引号字符双引号字符34 ddd一到三位八进制数一到三位八进制数ddd代表的字符代表的字符ddd (八进制)(八进制) xhh一到两位十六进制数一到两位十六进制数hh代表的字符代表的字符hh(十六进制)(十六进制) -16- 第第2 2章章 数据类型与表达式数据类型与表达式 ASCI

25、I码码键盘键盘ASCII 码码键盘键盘ASCII 码码键盘键盘ASCII 码码键盘键盘 27ESC32SPACE33!34 35#36$37%3860 63?6465A66B 67C68D69E70F 71G72H73I74J 75K76L77M78N 79O80P81Q82R 83S84T85U86V 87W88X89Y90Z 91929394 95_9697a98b 99c100d101e102f 103g104h105i106j 107k108l109m110n 111o112p113q114r 115s116t117u118v 119w120 x121y122z 123124|1251

26、26 -17- 第第2 2章章 数据类型与表达式数据类型与表达式 2.5 字符型数据字符型数据 【例例2-42-4】下面程序中使用了几种转义字符。下面程序中使用了几种转义字符。 main()main() printf(abxbcdtefghtijkln); printf(abxbcdtefghtijkln); printf(xxxxxxxxrmnoptqrst printf(xxxxxxxxrmnoptqrst uvwxn); uvwxn); 程序运行时在显示屏上得到以下结果:程序运行时在显示屏上得到以下结果: abcd abcd efgh efgh ijklijkl mnopmnopqrst

27、 qrst uvwxuvwx -18- 第第2 2章章 数据类型与表达式数据类型与表达式 2.5 字符型数据字符型数据 字符变量字符变量 字符变量用来存放字符常量,一字符变量用来存放字符常量,一 个字符变量只能放一个字符。个字符变量只能放一个字符。 字符变量的定义形式:字符变量的定义形式: char char 变量名表列;变量名表列; 例如:例如: char c1,c2;char c1,c2; c1=A; c1=A; c2=B; c2=B; C C语言编译系统规定用一个字节语言编译系统规定用一个字节 来存放一个字符,将一个字符常量来存放一个字符,将一个字符常量 赋值给一个变量,实际上是将该字赋

28、值给一个变量,实际上是将该字 符的符的ASCIIASCII代码放到存储单元中。代码放到存储单元中。 【例例2-52-5】将字符数据以不同的方式将字符数据以不同的方式 输出。输出。 main()main() char c1,c2; char c1,c2; c1=A; c1=A; c2=B; c2=B; printf(%c,%cn,c1,c2); printf(%c,%cn,c1,c2); printf(%d,%d,c1,c2); printf(%d,%d,c1,c2); A,B 65,66 【例例2-62-6】大小写字母的转换。大小写字母的转换。 main()main() char c1,c2,

29、c3,c4; char c1,c2,c3,c4; c1=A; c1=A; c2=B; c2=B; c3=c1+32; c3=c1+32; c4=c2+32; c4=c2+32; printf(%c,%c,c3,c4); printf(%c,%c,c3,c4); a,b -19- 第第2 2章章 数据类型与表达式数据类型与表达式 2.5 字符型数据字符型数据 字符串常量字符串常量 定义:字符串就是用两个双引号(定义:字符串就是用两个双引号(“)括起来的若干个字符。)括起来的若干个字符。 例如,例如,ChinaChina、8838387288383872、AJ200 AJ200 存储:存储:每个字

30、符串尾自动加一个每个字符串尾自动加一个 00 作为字符串结束标志作为字符串结束标志 例如:字例如:字 符串符串“CHINA”CHINA”在内存中在内存中 字符串的长度字符串的长度:字符串中所有字符的个数,其中每个转义字符当字符串中所有字符的个数,其中每个转义字符当 作一个字符。作一个字符。 例如,字符串例如,字符串“China”China”,、,、ABCDABCD、“101102x43x44”101102x43x44” 的长度分别为的长度分别为5 5、4 4、6 6、4 4。 字符常量与字符串常量不同字符常量与字符串常量不同 没有字符串变量,用字符数组存放没有字符串变量,用字符数组存放 C H

31、 I N A 0 a a a 0 a 0例例 a a“a”“a” 例例: char ch; ch=A; -20- 第第2 2章章 数据类型与表达式数据类型与表达式 2.6 系统函数系统函数 简例简例 【例例2-72-7】假设根据自变量假设根据自变量x x不同的值求下式的值:不同的值求下式的值: x x7 7+sinx-log+sinx-log10 10(x+3) (x+3) 在在C C语言中可使用以下程序:语言中可使用以下程序: #include#include main() main() float x,y; float x,y; scanf(%f, scanf(%f, y=pow(x,7)

32、+sin(x)-log10(x+3); y=pow(x,7)+sin(x)-log10(x+3); printf(%f,y); printf(%f,y); -21- 第第2 2章章 数据类型与表达式数据类型与表达式 2.6 系统函数系统函数 函数:是可以被调用的一段程序。函数:是可以被调用的一段程序。 库函数:软件开发商编写了很多标准函数,作为运算符的补充,供用户库函数:软件开发商编写了很多标准函数,作为运算符的补充,供用户 调用,称之为库函数或系统函数。调用,称之为库函数或系统函数。 库函数存储在扩展名为库函数存储在扩展名为.lib.lib的文件中。的文件中。 按库函数类划分为:数学函数、字

33、符函数、字符串函数、输入输出函按库函数类划分为:数学函数、字符函数、字符串函数、输入输出函 数、动态存储分配函数等。其声明分别包含在数、动态存储分配函数等。其声明分别包含在math.hmath.h、ctype.hctype.h、 string.hstring.h、stdio.hstdio.h和和stdlib.hstdlib.h等文件中。如果程序需要调用这些库函等文件中。如果程序需要调用这些库函 数,就要在源程序文件中使用文件包含命令:数,就要在源程序文件中使用文件包含命令: #include#include 或或 #include#include文件名文件名 输入输出函数输入输出函数scanf

34、()scanf()和和printf()printf()也是库函数,称为标准输入输出函也是库函数,称为标准输入输出函 数,它们的声明包含在文件数,它们的声明包含在文件stdio.hstdio.h中。由于中。由于Turbo CTurbo C允许使用标准输允许使用标准输 入输出函数的时候省略头文件,所以上述例子中我们未使用入输出函数的时候省略头文件,所以上述例子中我们未使用 #include#include。 -22- 第第2 2章章 数据类型与表达式数据类型与表达式 求求tg tg x x的值的值doubledoubledoubledoubletan(x)tan(x)tantan 求求x x的平方

35、根,的平方根,x x00doubledoubledoubledoublesqrt(x)sqrt(x)sqrtsqrt 求求sin sin x x的值的值doubledoubledoubledoublesin(x)sin(x)sinsin 产生产生90903276732767的随机整数的随机整数intintrand()rand()randrand 求求x xy y的值的值doubledoubledoubledoublepow(x,y)pow(x,y)powpow 求求loglog10 10 x x的值, 的值,x x00 doubledoubledoubledoublelog10(x)log10

36、(x)log10log10 求求ln ln x x的值,的值,x x00doubledoubledoubledoublelog(x)log(x)loglog 求求e ex x的值的值doubledoubledoubledoubleexp(x)exp(x)expexp 求求cos cos x x的值,的值,x x的单位为弧度的单位为弧度doubledoubledoubledoublecos(x)cos(x)coscos 求求x x的反正切的反正切doubledoubledoubledoubleatan(x)atan(x)atanatan 求求x x的反正弦,的反正弦,-1-1x x11doubl

37、edoubledoubledoubleasin(x)asin(x)asinasin 求求x x的反余弦,的反余弦,-1-1x x11doubledoubledoubledoubleacos(x)acos(x)acosacos 求求x x的绝对值的绝对值intintintintabs(x)abs(x)absabs 功功 能能 说说 明明函数值类型函数值类型自变量类型自变量类型调用形式调用形式函函 数数 名名 常用数学函数常用数学函数 -23- 第第2 2章章 数据类型与表达式数据类型与表达式 2.7 C运算符概述运算符概述 C的运算符有以下几种:的运算符有以下几种: 算术运算符:(算术运算符:(

38、+ +、- -、* *、/ /、% %),自加自减运算符(),自加自减运算符(+、-)。)。 类型转换运算符(类型转换运算符(( (类型符类型符) ))。)。 关系运算符(关系运算符( 、= 、=、=、!=!=)。)。 逻辑运算符(逻辑运算符(! !、int i=3,j,k; j=i+; j=i+; k=+i; k=+i; printf(%d,%d,%d,i,j,k); printf(%d,%d,%d,i,j,k); -26- 第第2 2章章 数据类型与表达式数据类型与表达式 2.8 算术运算符算术运算符 说明:说明: +和和-运算符只能用于变量,不能用于常量或表达式。运算符只能用于变量,不能

39、用于常量或表达式。 分析:分析:(a + b)+ ?(a + b)+ ? +和和-的结合方向是的结合方向是 自右至左自右至左 。 例如:例如:-x+ -x+ 相当于相当于-(x+)-(x+) -27- 第第2 2章章 数据类型与表达式数据类型与表达式 2.8 算术运算符算术运算符 类型转换运算符及类型转换类型转换运算符及类型转换 类型转换运算符类型转换运算符 l 一般形式:(类型名)(表达式)一般形式:(类型名)(表达式) 例例 (int)(x+y)(int)(x+y) (int)x+y (int)x+y (double)(3/2) (double)(3/2) (int)3.6 (int)3.

40、6 l 说明:强制转换得到所需类型的中间变量,原变量类型不变说明:强制转换得到所需类型的中间变量,原变量类型不变 -28- 第第2 2章章 数据类型与表达式数据类型与表达式 2.8 算术运算符算术运算符 类型转换类型转换 当表达式中出现不同类型的操作数时,要按一定的规则将其转换为相当表达式中出现不同类型的操作数时,要按一定的规则将其转换为相 同的类型。遵循以下转换规则:同的类型。遵循以下转换规则: 【例例2-82-8】设设a a是整型变量,其值为是整型变量,其值为2 2,c c是字符变量,其值为是字符变量,其值为AA,x x是实是实 型变量,其值为型变量,其值为1.51.5,则表达式:,则表达

41、式: x+cx+c* *a/10-3/2a/10-3/2 高高 double float double float longlong unsignedunsigned 低低 int char, shortint char, short 横向朝左的箭头表示必定的转换。横向朝左的箭头表示必定的转换。 纵向箭头表示当运算对象为不同类纵向箭头表示当运算对象为不同类 型时转换的方向。低级类型转换为型时转换的方向。低级类型转换为 高级类型。高级类型。 转换是由系统自动进行。转换是由系统自动进行。 -29- 第第2 2章章 数据类型与表达式数据类型与表达式 2.9 关系运算符和逻辑运算符关系运算符和逻辑运算

42、符 关系运算符关系运算符 115+4!=20-2不等于不等于!= 0A=C等于等于= 1W=K大于等于大于等于= 0ab大于大于 07*2=5小于等于小于等于= 11520小于小于 结结 果果实实 例例含含 义义运运 算算 符符 -30- 第第2 2章章 数据类型与表达式数据类型与表达式 2.9 关系运算符和逻辑运算符关系运算符和逻辑运算符 在比较时注意以下规则:在比较时注意以下规则: 如果两个操作数是数值型,则按其大小比较。如果两个操作数是数值型,则按其大小比较。 如果两个操作数是字符型,则按字符的如果两个操作数是字符型,则按字符的ASCIIASCII码值进行比较,码值进行比较, 即即ASC

43、IIASCII码值大的字符大。码值大的字符大。 表中前四种运算符优先级相同,后两种优先级相同。前四种的表中前四种运算符优先级相同,后两种优先级相同。前四种的 优先级高于后两种。关系运算符具有自左至右的结合性。优先级高于后两种。关系运算符具有自左至右的结合性。 关系运算符的优先级低于算术运算符。关系运算符的优先级低于算术运算符。 例例 当当a a的值为的值为2 2时,一个表达式的运算次序及结果如图时,一个表达式的运算次序及结果如图2-22-2所示。所示。 1 1 6 19 13 01 a = 7+a* *3 图图2-2 2-2 运算顺序运算顺序 -31- 第第2 2章章 数据类型与表达式数据类型

44、与表达式 2.9 关系运算符和逻辑运算符关系运算符和逻辑运算符 逻辑运算符逻辑运算符 C C语言中提供了三种逻辑运算符:语言中提供了三种逻辑运算符: 单目逻辑运算符:单目逻辑运算符:! !(逻辑(逻辑“非非”)。)。 双目逻辑运算符:双目逻辑运算符: char ch; scanf(%c, / scanf(%c, /* * 输入一个字符,赋给变量输入一个字符,赋给变量chch* */ / ch=(ch=A * */ / printf(%c,ch); printf(%c,ch); -34- 第第2 2章章 数据类型与表达式数据类型与表达式 2.10 位运算符与长度运算符位运算符与长度运算符 原码、

45、反码和补码原码、反码和补码 当真值当真值 x=+xn-2xn-3x=+xn-2xn-3x0 x0时,它的原码、反码和补码完全相同,时,它的原码、反码和补码完全相同, xx原 原=x =x反 反=x =x补 补=0 x =0 xn-2 n-2x xn-3n-3x x0 0 当真值当真值x=-xn-2xn-3x=-xn-2xn-3x0 x0时,它的原码、反码和补码与时,它的原码、反码和补码与x x的关系:的关系: 其中其中 表示表示x xi i取反,即取反,即 n n位位 032 .x1xxx nn 原 012 .1xxxx nn 反 1.1 012 xxxx nn补 i x 0 1 xi 1x

46、0 x i i 当 当 -35- 第第2 2章章 数据类型与表达式数据类型与表达式 2.10 位运算符与长度运算符位运算符与长度运算符 【例例2-102-10】假设某计算机的字长为假设某计算机的字长为1616位,试写出二进制数位,试写出二进制数+100010+100010和和- - 100010100010的原码、反码和补码。的原码、反码和补码。 解:解:x=+0010 x=+0010 y=-0010 y=-0010 x x对应的机器数如下:对应的机器数如下:xx原 原=x =x反 反=x =x补 补=00010 =00010 真值真值y y为负,则有为负,则有 yy原 原=10010 =10

47、010 y y反 反=1111111111011101 =1111111111011101 y y补 补=1111111111011110 =1111111111011110 【例例2-112-11】已知已知xx补 补=1111111111110010 =1111111111110010,求真值,求真值x x。 解:由解:由xx补 补求出 求出xx反 反,则得 ,则得 xx反 反=1111111111110010-1=1111111111110001 =1111111111110010-1=1111111111110001 x x原 原=11110 =11110 x x原 原对应的符号位为 对

48、应的符号位为1 1,故其对应的真值为负,且数值位与原码各,故其对应的真值为负,且数值位与原码各 位相同,即有位相同,即有 x=(- -1110)2=14 -36- 第第2 2章章 数据类型与表达式数据类型与表达式 2.10 位运算符与长度运算符位运算符与长度运算符 移位运算移位运算符符 1 1左移位运算符左移位运算符 e1n e1n 例如例如: x=-32767: x=-32767,手工计算,手工计算x2x2的步骤如下:的步骤如下: 第一步:第一步:xx原 原=1111111111111111 =1111111111111111 第二步:第二步:xx反 反=10000 =10000 第三步:第

49、三步:xx补 补=10001 =10001 第四步:将第四步:将xx补 补左移位两次得 左移位两次得 0010000100 第五步:将上式看作结果数所对应的补码,求原码。由于符号位为第五步:将上式看作结果数所对应的补码,求原码。由于符号位为0 0,其,其 原码还等于补码。原码还等于补码。 第六步:由原码得到真值为第六步:由原码得到真值为4 4,这正是,这正是x2x2的运算结果。的运算结果。 一般来说,一个整数左移一位,其结果相当于这个整数乘以一般来说,一个整数左移一位,其结果相当于这个整数乘以2 2(数值溢出(数值溢出 时例外)。时例外)。 例如:例如: -21 -2 e1n e1n 注意注意

50、: : 对无符号数,右移时,左边高位移入对无符号数,右移时,左边高位移入0 0。 对于有符号的值,如果原来符号位为对于有符号的值,如果原来符号位为0 0(该数为正),则左边也是移(该数为正),则左边也是移 入入0 0;如果符号位原来为;如果符号位原来为1 1(该数为负),则左边移入(该数为负),则左边移入0 0还是还是1 1,要取决,要取决 于所用的计算机系统。有的系统移入于所用的计算机系统。有的系统移入0 0,有的系统移入,有的系统移入1 1。Turbo CTurbo C及多及多 数数C C编译系统是移入编译系统是移入1 1,即保持数的正负性不变。,即保持数的正负性不变。 一般来说,一个整数

51、右移一般来说,一个整数右移1 1位,其结果相当于这个整数除以位,其结果相当于这个整数除以2 2。 例如:例如: 142142,相当于,相当于1414连续两次除以连续两次除以2 2并取整,即其值为并取整,即其值为3 3。 -38- 第第2 2章章 数据类型与表达式数据类型与表达式 2.10 位运算符与长度运算符位运算符与长度运算符 位逻辑运算符位逻辑运算符 1 1按位取反运算符按位取反运算符 以以intint型数据为例,若型数据为例,若a a的值为的值为2 2,则,则 aa补 补=00010 =00010 按位取反得按位取反得 11111111111111011111111111111101 上

52、式对应的原码为上式对应的原码为 1001110011 从而知从而知(a)(a)的值为的值为-3-3。 2 2按位与运算符按位与运算符& & 按位与运算符按位与运算符& &的作用是对两个操作数按位求逻辑与。的作用是对两个操作数按位求逻辑与。 0010100000000000 0010100000000000(&) 0010110000000000 -39- 第第2 2章章 数据类型与表达式数据类型与表达式 2.10 位运算符与长度运算符位运算符与长度运算符 3 3按位或运算符按位或运算符| | 按位或运算符按位或运算符| |的作用是对两个操作数按位求逻辑或。的作用是对两个操作数按位求逻辑或。 4

53、 4按位异或运算符按位异或运算符 按位异或运算符使参加运算的两个数按位求异或,即当两个二进位相按位异或运算符使参加运算的两个数按位求异或,即当两个二进位相 异则结果为异则结果为1 1,相同则结果为,相同则结果为0 0。 0010110000000000 0010100000000000(|) 0010110000000000 0000010000000000 0010100000000000)( 0010110000000000 -40- 第第2 2章章 数据类型与表达式数据类型与表达式 2.10 位运算符与长度运算符位运算符与长度运算符 求长度运算符求长度运算符sizeof sizeof( sizeof(类型符或变量名类型符或变量名) ) 运算结果为操作数对应的类

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论