《《C语言数据类型》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《C语言数据类型》PPT课件.ppt(62页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第二章 数据类型运算符 和 表达式第二章第二章 数据类型、运算符和表达式数据类型、运算符和表达式内容提要内容提要 数据类型数据类型常量与变量常量与变量运算符与表达式运算符与表达式2.1 2.1 数据类型数据类型数据类型总表数据类型总表双精度型双精度型双精度型双精度型 doubledouble单精度型单精度型单精度型单精度型 floatfloat短整型短整型短整型短整型 shortshortC C C C数数数数据据据据类类类类型型型型基本类型基本类型基本类型基本类型指针类型指针类型指针类型指针类型空类型空类型空类型空类型 voidvoid字符类型字符类型字符类型字符类型 charchar整整整
2、整 型型型型实型实型实型实型聚合类型聚合类型聚合类型聚合类型枚举类型枚举类型枚举类型枚举类型 enumenum数组数组数组数组结构体结构体结构体结构体 structstruct共用体共用体共用体共用体 unionunion长整型长整型长整型长整型 longlong整型整型整型整型 intint数据类型决定:数据类型决定:数据类型决定:数据类型决定:1.1.数据占内存字节数数据占内存字节数数据占内存字节数数据占内存字节数2.2.数据取值范围数据取值范围数据取值范围数据取值范围3.3.其上可进行的操作其上可进行的操作其上可进行的操作其上可进行的操作类型类型类型类型 符号符号符号符号关键字关键字关键
3、字关键字数的表示范围数的表示范围数的表示范围数的表示范围所占位数所占位数所占位数所占位数整整型型字字符符型型实实型型有有无无(signed)(signed)intint16-3276832767(signed)(signed)shortshort1616-3276832767-3276832767(signed)long32-214748364821474836471616unsignedunsigned intint06553506553532320429496729504294967295unsignedunsigned longlongunsignedunsigned shortshor
4、t1616065535065535有有floatfloat323.4e-383.4e38有有有有doubledouble64641.7e-3081.7e3081.7e-3081.7e308有有有有charchar8 8-128127-128127无无无无unsigned charunsigned char8 802550255说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例。基本数据类型基本数据类型基本数据类型基本数据类型2.1 2.1 数据类型数据类型2.22.2 常量与变量常量与变量数据是程序的处理对象数据是程序的处理对象C C语言将数据分为常量与变量语言将数据分为常
5、量与变量2.2.1 2.2.1 2.2.1 2.2.1 常量常量常量常量1.1.1.1.常量的定义及分类常量的定义及分类常量的定义及分类常量的定义及分类定义:程序运行的过程中,其值不能改变定义:程序运行的过程中,其值不能改变定义:程序运行的过程中,其值不能改变定义:程序运行的过程中,其值不能改变 的量。的量。的量。的量。分类分类分类分类:整型常量整型常量整型常量整型常量 实型常量实型常量实型常量实型常量 字符常量字符常量字符常量字符常量 字符串常量字符串常量字符串常量字符串常量 符号常量符号常量符号常量符号常量2.22.2 常量与变量常量与变量2.2.2.2.整型常量(既整常数)整型常量(既整
6、常数)整型常量(既整常数)整型常量(既整常数)三种形式:三种形式:三种形式:三种形式:十进制整数:由数字十进制整数:由数字十进制整数:由数字十进制整数:由数字09090909和正负号表示和正负号表示和正负号表示和正负号表示.如如如如 123,-456,0123,-456,0123,-456,0123,-456,0八进制整数:由数字八进制整数:由数字八进制整数:由数字八进制整数:由数字0 0 0 0开头开头开头开头,后跟数字后跟数字后跟数字后跟数字07070707表表表表示示示示.如如如如0123,0110123,0110123,0110123,011十六进制整数:由十六进制整数:由十六进制整数
7、:由十六进制整数:由0 x0 x0 x0 x开头开头开头开头,后跟后跟后跟后跟09,af,AF09,af,AF09,af,AF09,af,AF表示表示表示表示.如如如如0 x123,0Xff0 x123,0Xff0 x123,0Xff0 x123,0Xff 转换成十进制数的方法:转换成十进制数的方法:0123 =1x82+2x81+3x80=(83 )100 x123=1x162+2x161+3x160=(291)100Xff =15x161+15x160=(255 )102.22.2 常量与变量常量与变量整型常量的说明整型常量的说明(1)(1)(1)(1)空白字符不可以出现在整数数字之间空白
8、字符不可以出现在整数数字之间 (2)(2)(2)(2)根据其值所在范围确定其数据类型根据其值所在范围确定其数据类型(3)3)3)3)在在整常量后加字母整常量后加字母l l或或L L,认为它是认为它是 long int long int 型常量型常量例如例如 30000 为为int型型 65536 为为long int 型型 79L、012L 为为long int 型型2.22.2 常量与变量常量与变量 3.3.3.3.实型常量实型常量实型常量实型常量实常数或浮点数,是一个十进制表示的符号实数实常数或浮点数,是一个十进制表示的符号实数实常数或浮点数,是一个十进制表示的符号实数实常数或浮点数,是一
9、个十进制表示的符号实数表示形式:表示形式:表示形式:表示形式:十进制小数形式十进制小数形式十进制小数形式十进制小数形式 digits.digitsdigits.digitsdigits.digitsdigits.digits 如如如如0.123,.123,123.0,0.123,.123,123.0,0.123,.123,123.0,0.123,.123,123.0,0.0,123.0.0,123.0.0,123.0.0,123.指数形式(包括整数部分、尾数部分和指数部指数形式(包括整数部分、尾数部分和指数部指数形式(包括整数部分、尾数部分和指数部指数形式(包括整数部分、尾数部分和指数部分分分
10、分 )digits.digits digits.digits digits.digits digits.digits E|eE|eE|eE|e+|-digits+|-digits+|-digits+|-digits 小数点之前是整数部分,小数点之后是尾数部小数点之前是整数部分,小数点之后是尾数部小数点之前是整数部分,小数点之后是尾数部小数点之前是整数部分,小数点之后是尾数部分,小数点在没有尾数时可省略。分,小数点在没有尾数时可省略。分,小数点在没有尾数时可省略。分,小数点在没有尾数时可省略。如如如如12.312.312.312.3e3,123E2e3,123E2e3,123E2e3,123E2
11、2.22.2 常量与变量常量与变量实型常量的说明实型常量的说明(1)(1)实型常量采用十进制小数形式表示时,必须有实型常量采用十进制小数形式表示时,必须有 小数点。例如小数点。例如:123.:123.是实型常量,而是实型常量,而123123是整型是整型 常量常量(2)(2)采用指数形式表示时,在采用指数形式表示时,在E E或或e e之前必须要有数之前必须要有数 字,且之后的指数必须为整数。例如:字,且之后的指数必须为整数。例如:E6E6、.e6.e6、e e 等都是不合法的等都是不合法的(3)(3)实型常量的整数部分为实型常量的整数部分为0 0时可以省略,如下形式时可以省略,如下形式 是允许的
12、:是允许的:.57,.0075e2,-.125,-.175E-2.57,.0075e2,-.125,-.175E-2(4)(4)所有的实型常量均被看作是双精度类型所有的实型常量均被看作是双精度类型(doubledouble)2.22.2 常量与变量常量与变量4.4.4.4.字符常量字符常量字符常量字符常量定义定义定义定义:用单引号括起来的单个普通字符或用单引号括起来的单个普通字符或用单引号括起来的单个普通字符或用单引号括起来的单个普通字符或转义字符转义字符转义字符转义字符。分为一般字符常量和特殊字符常量分为一般字符常量和特殊字符常量分为一般字符常量和特殊字符常量分为一般字符常量和特殊字符常量一
13、般字符常量:一般字符常量:一般字符常量:一般字符常量:如如如如aaaa、9999、!等。单引号只起定等。单引号只起定等。单引号只起定等。单引号只起定界作用并不表示字符本身,中间的字符可以界作用并不表示字符本身,中间的字符可以界作用并不表示字符本身,中间的字符可以界作用并不表示字符本身,中间的字符可以是除单引号(是除单引号(是除单引号(是除单引号()和反斜杠()和反斜杠()和反斜杠()和反斜杠()以外的数)以外的数)以外的数)以外的数字、字母等字、字母等字、字母等字、字母等C C C C语言字符集中包含的所有可显语言字符集中包含的所有可显语言字符集中包含的所有可显语言字符集中包含的所有可显示字符
14、。示字符。示字符。示字符。特殊字符常量(也叫转义字符)特殊字符常量(也叫转义字符)特殊字符常量(也叫转义字符)特殊字符常量(也叫转义字符)是是是是C C C C语言中表示字符的一种特殊形式,其含语言中表示字符的一种特殊形式,其含语言中表示字符的一种特殊形式,其含语言中表示字符的一种特殊形式,其含义为将反斜杠(义为将反斜杠(义为将反斜杠(义为将反斜杠()后面的字符转换成另外)后面的字符转换成另外)后面的字符转换成另外)后面的字符转换成另外的意义。的意义。的意义。的意义。2.22.2 常量与变量常量与变量字符常量的字符常量的值值:该字符的:该字符的ASCIIASCII码码值值如如如如 A65A65
15、A65A65,a97a97a97a97,048,n10048,n10048,n10048,n10 转义字符及其含义:b _above$123M.D.John3days#33char$123ab2.22.2 常量与变量常量与变量 在在在在C C C C语言中,允许将程序中的常量定义为一语言中,允许将程序中的常量定义为一语言中,允许将程序中的常量定义为一语言中,允许将程序中的常量定义为一个标识符,称为符号常量。在使用符号常量前个标识符,称为符号常量。在使用符号常量前个标识符,称为符号常量。在使用符号常量前个标识符,称为符号常量。在使用符号常量前必须先加以定义,一般情况下,符号常量使用必须先加以定义
16、,一般情况下,符号常量使用必须先加以定义,一般情况下,符号常量使用必须先加以定义,一般情况下,符号常量使用大写英文字母表示。大写英文字母表示。大写英文字母表示。大写英文字母表示。其定义的一般形式为:其定义的一般形式为:#define#define 例如:例如:#define PRICE 35#define PRICE 352.22.2 常量与变量常量与变量2.2.2 2.2.2 变量变量概念:其值可以改变的量概念:其值可以改变的量变量名变量名与与变量值变量值变量定义的一般格式:变量定义的一般格式:数据类型数据类型 变量变量11,变量,变量2 2,变量,变量n;n;变量初始化变量初始化:定义时赋
17、初值定义时赋初值变量的使用:变量的使用:先定义,后使用先定义,后使用变量值变量值3a变量名变量名存储单元存储单元决定分配字节数和数的表示范围合法标识符例例:int a,b,c;float data;例例:int a=2,b,c=4;float data=3.67;char ch=A;int x=1,y=1,z=1;int x=y=z=1;main()int a,b=2;float data;a=1;data=(a+b)*1.2;printf(“data=%fn”,data);变量定义main()int a,b=2;a=1;float data;data=(a+b)*1.2;printf(“da
18、ta=%fn”,data);2.22.2 常量与变量常量与变量编译程序根据变量定义为其编译程序根据变量定义为其分配指定字节的内存单元分配指定字节的内存单元.地址地址int a=1,b=-3,c;abc2字节字节2字节字节2字节字节地址地址地址地址.内存内存1-3随机数随机数变量定义位置:变量定义位置:一般一般放在函数开头放在函数开头2.22.2 常量与变量常量与变量 与常量类似,变量也有不同的类型,与常量类似,变量也有不同的类型,一般可以分为以下三种类型:一般可以分为以下三种类型:整型变量整型变量 实型变量实型变量 字符变量字符变量2.22.2 常量与变量常量与变量1.1.1.1.整型变量整型
19、变量整型变量整型变量 (1 1 1 1)整型变量的分类整型变量的分类整型变量的分类整型变量的分类 基本型基本型基本型基本型 短整型短整型短整型短整型 长整型长整型长整型长整型 无符号整型无符号整型无符号整型无符号整型基本型基本型:类型说明符为int,在内存中占2个字节。短整型:短整型:类型说明符为short int或short,所占字节和取值范围均与基本型相同。长整型:长整型:类型说明符为long int或long,在内存中占4个字节。无符号整型:类型说明符为unsigned。.无符号基本型:类型说明符为 unsigned int或 unsigned。.无符号短整型:类型说明符为unsigne
20、d short。.无符号长整型:类型说明符为unsigned long。2.22.2 常量与变量常量与变量例例2-1 2-1 整型变量的使用整型变量的使用#include#include int main()int main()int x,y,z;int x,y,z;x=10;y=20;x=10;y=20;z=x+y;z=x+y;printf(“x+y=%dn”,z);printf(“x+y=%dn”,z);return 0;return 0;输出结果:输出结果:x+y=30 x+y=30(2 2 2 2)整型变量的定义与使用)整型变量的定义与使用)整型变量的定义与使用)整型变量的定义与使用2
21、.22.2 常量与变量常量与变量int x;int x;x=10;x=10;则变量则变量x x的值的值1010在内存中的存放形式:在内存中的存放形式:int x;int x;x=-10;x=-10;则变量则变量x x的值的值1010在内存中的存放形式:在内存中的存放形式:(3 3 3 3)整型数据在内存中的存放形式)整型数据在内存中的存放形式)整型数据在内存中的存放形式)整型数据在内存中的存放形式2.22.2 常量与变量常量与变量例例2-2 2-2 整型数据的溢出问题整型数据的溢出问题#include#include int main()int main()int x,y;int x,y;x=
22、32767;x=32767;y=x+1;y=x+1;printf(%d,%dn,x,y);printf(%d,%dn,x,y);return 0;return 0;运行结果:运行结果:-32768-32768原因:一个原因:一个intint型变量只能容纳型变量只能容纳-32768-32768到到3276732767范范 围内的数,无法表示超过这个范围的数。围内的数,无法表示超过这个范围的数。(4 4 4 4)整型数据的溢出)整型数据的溢出)整型数据的溢出)整型数据的溢出2.22.2 常量与变量常量与变量2.2.2.2.实型变量实型变量实型变量实型变量 (1)(1)(1)(1)实型变量的分类实型
23、变量的分类实型变量的分类实型变量的分类单精度实型:类型说明符为单精度实型:类型说明符为单精度实型:类型说明符为单精度实型:类型说明符为floatfloatfloatfloat,在内存中,在内存中,在内存中,在内存中占占占占4 4 4 4个字节,提供个字节,提供个字节,提供个字节,提供7 7 7 7位有效数字。位有效数字。位有效数字。位有效数字。双精度实型:类型说明符为双精度实型:类型说明符为双精度实型:类型说明符为双精度实型:类型说明符为doubledoubledoubledouble,在内存,在内存,在内存,在内存中占中占中占中占8 8 8 8个字节,提供个字节,提供个字节,提供个字节,提供
24、1 5 1 61 5 1 61 5 1 61 5 1 6位有效数字。位有效数字。位有效数字。位有效数字。例例 float a;a=111111.111;/*a=111111.1*/double b;b=111111.111;/*b=111111.111*/2.22.2 常量与变量常量与变量例例2-32-3实型变量的使用实型变量的使用#include#includeint main()int main()float x,y,z;float x,y,z;x=10;x=10;y=20;y=20;z=x+y;z=x+y;printf(“x+y=%fn”,z);printf(“x+y=%fn”,z);r
25、eturn 0;return 0;运行结果:运行结果:x+y=30.000000 x+y=30.000000(2 2 2 2)实型变量的定义与使用)实型变量的定义与使用)实型变量的定义与使用)实型变量的定义与使用2.22.2 常量与变量常量与变量例例 a=D;/*a=68;*/a=D;/*a=68;*/x=A+5;/*x=65+5;*/x=A+5;/*x=65+5;*/s=!+G /*s=33+71;*/s=!+G /*s=33+71;*/l l字符变量存放字符字符变量存放字符字符变量存放字符字符变量存放字符ASCIIASCIIASCIIASCII码码码码l lcharcharcharchar
26、与与与与intintintint数据间可进行算术运算数据间可进行算术运算数据间可进行算术运算数据间可进行算术运算没有字符串变量,用字符数组存放(3 3 3 3)字符变量)字符变量)字符变量)字符变量2.22.2 常量与变量常量与变量#include#include#include#include int main()int main()int main()int main()char c1,c2;/*char c1,c2;/*char c1,c2;/*char c1,c2;/*定义定义定义定义c1c1c1c1,c2c2c2c2为字符型变量为字符型变量为字符型变量为字符型变量*/c1=97;c2
27、=98;/*c1=97;c2=98;/*c1=97;c2=98;/*c1=97;c2=98;/*将整数将整数将整数将整数97979797和和和和98989898分别赋给分别赋给分别赋给分别赋给c1c1c1c1和和和和c2 c2 c2 c2*/*/*/*/printf(”%c,%cn”,c1,c2);/*printf(”%c,%cn”,c1,c2);/*printf(”%c,%cn”,c1,c2);/*printf(”%c,%cn”,c1,c2);/*以字符形式输出以字符形式输出以字符形式输出以字符形式输出c1c1c1c1和和和和c2*/c2*/c2*/c2*/printf(”%d,%d”,c1
28、,c2);/*printf(”%d,%d”,c1,c2);/*printf(”%d,%d”,c1,c2);/*printf(”%d,%d”,c1,c2);/*输出输出输出输出c1c1c1c1和和和和c2c2c2c2的的的的ASCIIASCIIASCIIASCII码值码值码值码值*/printf(”%d”,c1+c2);printf(”%d”,c1+c2);printf(”%d”,c1+c2);printf(”%d”,c1+c2);return 0;return 0;return 0;return 0;运行结果如下:运行结果如下:运行结果如下:运行结果如下:a,ba,ba,ba,b97,9897
29、,9897,9897,98 2.22.2 常量与变量常量与变量例例#define PRICE 12.5 main()int num=3;float total;char ch1,ch2=D;total=num*PRICE;ch1=ch2-A+a;printf(“total=%f,ch1=%cn”,total,ch1);宏定义变量定义输出结果运行结果:total=37.500000,ch1=d(4 4 4 4)变量的初始化)变量的初始化)变量的初始化)变量的初始化2.22.2 常量与变量常量与变量C运运算算符符算术运算符:(算术运算符:(算术运算符:(算术运算符:(+-*/%+-+-*/%+-+
30、-*/%+-+-*/%+-)关系运算符:(关系运算符:(关系运算符:(关系运算符:(=!=!=!=!=)逻辑运算符:(!逻辑运算符:(!逻辑运算符:(!逻辑运算符:(!&|&|&|&|)位运算符位运算符位运算符位运算符 :(:(:(:(|&|&|&|&)赋值运算符:(赋值运算符:(赋值运算符:(赋值运算符:(=及其扩展)及其扩展)及其扩展)及其扩展)条件运算符:(条件运算符:(条件运算符:(条件运算符:(?:?:?:?:)逗号运算符:(逗号运算符:(逗号运算符:(逗号运算符:(,)指针运算符:(指针运算符:(指针运算符:(指针运算符:(*&)求字节数求字节数求字节数求字节数 :(:(:(:(s
31、izeofsizeofsizeofsizeof)强制类型转换:(类型)强制类型转换:(类型)强制类型转换:(类型)强制类型转换:(类型)分量运算符:(分量运算符:(分量运算符:(分量运算符:(.-.-.-.-)下标运算符:(下标运算符:(下标运算符:(下标运算符:()其它其它其它其它 :(:(:(:(()-()-()-()-)运算符的分类运算符的分类 2.32.3 运算符与表达式运算符与表达式定义:定义:由常量、变量、函数、运算符和括号由常量、变量、函数、运算符和括号组合起来的、符合组合起来的、符合C C语法规则的式子称为表达式。语法规则的式子称为表达式。一个表达式有一个值以及其对应的类型一个
32、表达式有一个值以及其对应的类型表达式求值首先进行优先级高的运算再进行表达式求值首先进行优先级高的运算再进行优先级低的运算,然后对于优先级相同的运算按优先级低的运算,然后对于优先级相同的运算按结合方向进行运算。结合方向进行运算。结合方向:左结合、右结合结合方向:左结合、右结合例如:例如:x-y+z(x-y)+z x=y=zx=(y=z)2.32.3 运算符与表达式运算符与表达式算术运算符及算术表达式算术运算符及算术表达式1.1.1.1.基本算术运算符:基本算术运算符:基本算术运算符:基本算术运算符:+-*/%+-*/%+-*/%+-*/%结合方向:从左向右结合方向:从左向右结合方向:从左向右结合
33、方向:从左向右优先级:(高)优先级:(高)优先级:(高)优先级:(高)-*/%-+-*/%-+-*/%-+-*/%-+-说明:说明:说明:说明:“-”“-”“-”“-”可为可为可为可为单目单目单目单目运算符时运算符时运算符时运算符时,右结合性右结合性右结合性右结合性两整数相除,结果为整数,如果两整数两整数相除,结果为整数,如果两整数两整数相除,结果为整数,如果两整数两整数相除,结果为整数,如果两整数中有一个是负数,舍入规则为中有一个是负数,舍入规则为中有一个是负数,舍入规则为中有一个是负数,舍入规则为“向零取向零取向零取向零取整整整整”如果运算的两个数中有一个是实型,则如果运算的两个数中有一个
34、是实型,则如果运算的两个数中有一个是实型,则如果运算的两个数中有一个是实型,则结果为结果为结果为结果为doubledoubledoubledouble型型型型%要求两侧均为整型数据要求两侧均为整型数据要求两侧均为整型数据要求两侧均为整型数据例例5/2 =2 -5/2.0=-2.55%2 =1 -5%2 =-11%10=15%1 =05.5%2 ()2.32.3 运算符与表达式运算符与表达式#include#include#include#include int main()int main()int main()int main()printf(”10-9/6*5=printf(”10-9/6
35、*5=printf(”10-9/6*5=printf(”10-9/6*5=%d”,10 9/6*5);%d”,10 9/6*5);%d”,10 9/6*5);%d”,10 9/6*5);return 0;return 0;return 0;return 0;运行结果如下:运行结果如下:运行结果如下:运行结果如下:10-9/6*5=510-9/6*5=510-9/6*5=510-9/6*5=5#include#include#include#includemain()main()main()main()int x=5,y;int x=5,y;int x=5,y;int x=5,y;y=+x;y=
36、+x;y=+x;y=+x;printf(%dn,y);printf(%dn,y);printf(%dn,y);printf(%dn,y);输出结果输出结果输出结果输出结果:6 6 6 6例例2-5 计算表达式计算表达式10-9/6*5 2.32.3 运算符与表达式运算符与表达式例例2-6 2-6 计算表达式计算表达式10-3.0/210-3.0/2的值的值#include#include int main()int main()printf(”10-3.0/2=%f”,10-3.0/2);printf(”10-3.0/2=%f”,10-3.0/2);运行结果如下:运行结果如下:10-3.0/2
37、=8.50000010-3.0/2=8.500000 2.32.3 运算符与表达式运算符与表达式2.2.算术表达式算术表达式 定义:用算术运算符和括号将运算对象连接起来定义:用算术运算符和括号将运算对象连接起来的、符合的、符合C C语法规则的式子称为算术表达式。其语法规则的式子称为算术表达式。其中的运算对象包括常量、变量、函数等。中的运算对象包括常量、变量、函数等。例如:例如:x+yx+y、(x*2)/y(x*2)/y、sin(x)sin(x)sin(y)sin(y)等都是算等都是算术表达式。术表达式。doublefloatlongunsignedintchar,short高高高高低低 2.3
38、2.3 运算符与表达式运算符与表达式(1)(x+y)h2(1)(x+y)h2(2)s(s-a)(s-b)(s-c)(2)s(s-a)(s-b)(s-c)(3)(x+1)2+(y-1)2(3)(x+1)2+(y-1)2在在C C语言中,其合法的算术表达式如下:语言中,其合法的算术表达式如下:(1)(x+y)*h/2.0(1)(x+y)*h/2.0(2)s*(s-a)*(s-b)*(s-c)(2)s*(s-a)*(s-b)*(s-c)(3)(x+1)*(x+1)+(y-1)*(y-1)(3)(x+1)*(x+1)+(y-1)*(y-1)例例例例2-7 2-7 写出下列数学表达式对应的合法的写出下列
39、数学表达式对应的合法的写出下列数学表达式对应的合法的写出下列数学表达式对应的合法的C C算术算术算术算术 表达式表达式表达式表达式 2.32.3 运算符与表达式运算符与表达式种类:l =!=l 结合方向:自左向右 l 优先级别:l 关系运算符优先级低于算术运算符优先级优先级6(高)(高)优先级优先级7(低)(低)=!=2.3.2 2.3.2 2.3.2 2.3.2 关系运算符及关系表达式关系运算符及关系表达式关系运算符及关系表达式关系运算符及关系表达式1.1.1.1.关系运算符关系运算符关系运算符关系运算符例:例:例:例:ca+b ca+b 等价于等价于等价于等价于 c(a+b)c(a+b)a
40、b!=c (ab)!=c ab!=c (ab)!=c a=bc a=(bc)a=bc a=(bc a=(bc)a=bc a=(bc)2.32.3 运算符与表达式运算符与表达式关系运算结果:关系运算结果:1 1(真)和(真)和 0 0(假)(假)例例2-8 2-8 计算下列关系表达式的值计算下列关系表达式的值(1)1010(1)1010(2)10=10(2)10=10(3)1010!=10(3)1010!=10(4)3*8-9!=5+7%3(4)3*8-9!=5+7%3 2.32.3 运算符与表达式运算符与表达式2.2.关系表达式关系表达式 关系表达式的值关系表达式的值:是逻辑值是逻辑值“真真(
41、True)”(True)”或或“假假(False)”(False)”,用,用1 1或或0 0表示表示关系表达式例子关系表达式例子 intint a=3,b=2,c=1,d,f;a=3,b=2,c=1,d,f;ab ab (ab)=c (ab)=c b+cb+cab d=ab f=abc f=abc/表达式值表达式值1/表达式值表达式值1/表达式值表达式值0/d=1/f=0例例 若若a=0;b=0.5;x=0.3;则则 a=x0 结果为结果为 A100 结果为结果为10 2.32.3 运算符与表达式运算符与表达式种类:种类:!&|!&|逻辑运算真值表逻辑运算真值表优先级优先级 !(高!(高 2
42、2)&(1111)|(低(低 1212)ab!a!ba&b a|b真真假假真真假假假假假假真真真真真真假假假假假假假假假假真真真真假假假假真真真真真真假假真真真真逻辑运算符及逻辑表达式逻辑运算符及逻辑表达式 1.逻辑运算符逻辑运算符 2.32.3 运算符与表达式运算符与表达式例例 a=x&xb&xy a=b|x=y !a|ab/(a=x)&(xb)&(xy)/(a=b)|(x=y)/(!a)|(ab)例2-9 假设x=10,y=20,分析下列逻辑表达式。(1)!x(2)x&y(3)!x|y(4)!x+5|10%y=x-10y【例例2-102-10】写出满足要求的合法的写出满足要求的合法的C C
43、逻辑逻辑 表达式。表达式。(1)x(1)x表达表达0 0到到9 9的字符的字符(2)x(2)x 和和y y都大于都大于0 0(3)x(3)x是偶数并且是偶数并且x100 x100 2.32.3 运算符与表达式运算符与表达式位运算是指进行二进制位的运算例如:将一个存储单元中的各二进制位左移、右移,两个数按位相加等。说明说明(1)(1)位运算符中除位运算符中除 -以外,均为二目(元)以外,均为二目(元)运算符,即要求两侧各有一个运算量。运算符,即要求两侧各有一个运算量。(2)(2)运算量只能是整型或字符型的数据,不能运算量只能是整型或字符型的数据,不能为实型数据。为实型数据。附:位运算符附:位运算
44、符附:位运算符附:位运算符运算符运算符含义含义运算符运算符含义含义按位与按位与取反取反按位或按位或右移右移 2.32.3 运算符与表达式运算符与表达式 位运算中的位运算中的“&”、“|”和和“-”的真的真值表与逻辑运算等价,唯一不同的是位运值表与逻辑运算等价,唯一不同的是位运算是逐位进行运算的。算是逐位进行运算的。(异或位运算符)的真值表:(异或位运算符)的真值表:a ab babab0 00 00 01 10 01 11 11 10 00 01 11 1 2.32.3 运算符与表达式运算符与表达式 定义定义 :用逻辑运算符:用逻辑运算符 短路特性短路特性:逻辑表达式求解时,并非所有的:逻辑表
45、达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该逻辑运算符才能求出表达式的解时,才执行该运算符。运算符。例例 a&b&c /只在只在a为真时,才判别为真时,才判别b的值;的值;只在只在a、b都为真时,才判别都为真时,才判别 c的值的值例例 a|b|c /只在只在a为假时,才判别为假时,才判别b的值;的值;只在只在a、b都为假时,才判别都为假时,才判别 c的值的值例例 a=1;b=2;c=3;d=4;m=1;n=1;(m=ab)&(n=cd)/结果结果 m=0,n=12.2.逻辑表达式逻辑表达式 2.3
46、2.3 运算符与表达式运算符与表达式1.1.赋值运算符赋值运算符 赋值符号赋值符号“”就是赋值运算符,它的就是赋值运算符,它的作用是将一个数据赋给一个变量。作用是将一个数据赋给一个变量。例例2-11 2-11 假设变量假设变量x x为整型,计算下为整型,计算下列赋值表达式的值。列赋值表达式的值。(1)x=y=10(1)x=y=10(2)x=10+(y=20)(2)x=10+(y=20)(3)x=10+(y=20)/(z=30)(3)x=10+(y=20)/(z=30)2.3.4 2.3.4 赋值运算符及赋值表达式赋值运算符及赋值表达式 2.32.3 运算符与表达式运算符与表达式如果赋值运算符两
47、侧的数据类型不一致,但都是如果赋值运算符两侧的数据类型不一致,但都是数值型或字符型时,系统要进行类型转换。数值型或字符型时,系统要进行类型转换。将将浮浮点点型型数数据据(包包括括单单、双双精精度度)赋赋给给整整型型变变量时,舍弃浮点数的小数部分。量时,舍弃浮点数的小数部分。如如:为为整整型型变变量量,执执行行“i=3.56i=3.56;”的的结结果果是是使的值为,以整数形式存储在整型变量中。使的值为,以整数形式存储在整型变量中。将整型数据赋给单、双精度变量时,数值不变,将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中,即用但以浮点数形式存储到变量中,即用0 0补足有效补足有
48、效数字位。数字位。如:如:i i为为floatfloat型变量,执行型变量,执行“i=3i=3;”的结果的结果i=3.000000i=3.000000,以单精度浮点数形式存储到,以单精度浮点数形式存储到i i中。中。赋值运算符类型转换赋值运算符类型转换 2.32.3 运算符与表达式运算符与表达式将一个将一个doubledouble型数据赋给型数据赋给floatfloat变量时,截取变量时,截取其前面其前面7 7位有效数字,存放到位有效数字,存放到floatfloat变量的存储单变量的存储单元(元(4 4个字节)中。但应注意数值范围不能溢出。个字节)中。但应注意数值范围不能溢出。如果将一个如果将
49、一个floatfloat型数据赋给型数据赋给doubledouble变量时,数值变量时,数值不变,有效位数扩展到不变,有效位数扩展到1616位,在内存中以位,在内存中以8 8个字节个字节存储。存储。2.32.3 运算符与表达式运算符与表达式字符型数据赋给整型变量时,由于字符字符型数据赋给整型变量时,由于字符只占只占1 1个字节,而整型变量为个字节,因个字节,而整型变量为个字节,因此将字符数据(个二进位)放到整型变量此将字符数据(个二进位)放到整型变量存储单元的低位中。存储单元的低位中。第一种情况第一种情况:如果字符型为无符号的字符如果字符型为无符号的字符型,则将字符的位放到整型变量低位,型,则
50、将字符的位放到整型变量低位,高位补零。高位补零。第二种情况第二种情况:如果字符型为带符号的,如果字符型为带符号的,则将字符的位放到整型变量低位,高则将字符的位放到整型变量低位,高位补符号位,即(符号扩展)。位补符号位,即(符号扩展)。若字符最高若字符最高位为位为0 0,则整型变量高,则整型变量高8 8位补位补0 0;若字符最高;若字符最高位为位为1 1,则高,则高8 8位全补位全补1 1。2.32.3 运算符与表达式运算符与表达式将一个将一个intint、shortshort、longlong型数据赋给一型数据赋给一charchar型变量,只将其低型变量,只将其低8 8位原封不动地送到位原封不