1、第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 第二章数据类型、运算符与表达式第二章数据类型、运算符与表达式2.1 C的数据类型的数据类型 2.2 常量与变量常量与变量 2.3 整型数据整型数据 2.4 实型数据实型数据 2.5 字符型数据字符型数据2.6 变量的赋值变量的赋值 2.7 各类数值型数据之间的转换各类数值型数据之间的转换2.8 算术运算符和算术表达式算术运算符和算术表达式 2.9 赋值运算符和赋值表达式赋值运算符和赋值表达式 2.10 逗号运算符与逗号表达式逗号运算符与逗号表达式第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 2.1 C C的数据类
2、型的数据类型 整型整型 字符型字符型 基本类型基本类型 实型(浮点型)单精度型实型(浮点型)单精度型 双精度型双精度型 枚举类型枚举类型数据类型数据类型 数组类型数组类型 构造类型构造类型 结构体类型结构体类型 共用体类型共用体类型 指针类型指针类型 空类型空类型第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 2.2 常量与变量常量与变量一、一、常量与符号常量常量与符号常量常量:在程序运行中,其值不可能被改变的常量:在程序运行中,其值不可能被改变的 量称为常量。如任何数字值、单个字量称为常量。如任何数字值、单个字 符或字符串及转义符均为常量。符或字符串及转义符均为常量。类型:常
3、见的常量类型有类型:常见的常量类型有int,char,float(double),字符常量要用单引号引起来(或双引字符常量要用单引号引起来(或双引 号括起来)号括起来)第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 符号常量:用标识符代表一个常量。格式为:符号常量:用标识符代表一个常量。格式为:#define PRICE 30 (宏定义命令)宏定义命令)注注:#define为宏定义命令,表示用为宏定义命令,表示用PRICE来代表常量来代表常量30。宏定义宏定义#define的作用域由定义的起始位的作用域由定义的起始位 置至宏定义解除(置至宏定义解除(#undef 标识符)处标识
4、符)处 或本程序末尾。或本程序末尾。宏定义命令宏定义命令#define必须写在函数的最必须写在函数的最 前面前面,且此句之后不带分号。且此句之后不带分号。第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 在宏定义的作用域内,该符号(标识符)在宏定义的作用域内,该符号(标识符)不能再被重新赋值。不能再被重新赋值。习惯上符号常量用大写,变量用小写,习惯上符号常量用大写,变量用小写,以示区别。以示区别。二、变量二、变量 定义:程序执行过程中其值可以被改变的量称定义:程序执行过程中其值可以被改变的量称 为变量。为变量。标识符:标识符:C 语言中用来标识变量名,函数名,语言中用来标识变量名
5、,函数名,数 组 名,类 型 名,文 件 名 的 有 效 字 符数 组 名,类 型 名,文 件 名 的 有 效 字 符 序列称为标识符。序列称为标识符。第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 变量的定义:变量的定义:C语言中所有变量都必须语言中所有变量都必须先定义先定义后使用。后使用。标识符规定:只能由标识符规定:只能由字母,数字,下划线字母,数字,下划线三种字符组成,且第一个字符必须为三种字符组成,且第一个字符必须为 字母或下划线。字母或下划线。标识符长度:系统不同,允许的长度不同,一标识符长度:系统不同,允许的长度不同,一般取长度般取长度8即可,标识符大小写不即可,
6、标识符大小写不 通用。通用。变量的基本类型有:变量的基本类型有:int,float,char,num.第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 例例1 指出以下哪些是非法变量名?指出以下哪些是非法变量名?value$sum Piece Flags5_9 3sp_sy5temint$为非法变量名字符为非法变量名字符 变量名中间不允许有空格变量名中间不允许有空格 不允许数字打头不允许数字打头 C语言中的保留名或关键字语言中的保留名或关键字第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 2.3 整型数据整型数据一、整型常量:一、整型常量:整型常量即整常数(可正可
7、负),整型常量即整常数(可正可负),C中的中的(int)常量常量有三种形式:十进制、八进制、十六进制。有三种形式:十进制、八进制、十六进制。1.十进制整数:十进制整数:由正负号与由正负号与09共共10个数字组个数字组 成,终端输出时成,终端输出时printf中的格式为中的格式为%d。2.八进制整数:八进制整数:由正负号与由正负号与07共共8个数字组成,个数字组成,且八进制整常量第一个数字一定为且八进制整常量第一个数字一定为0,例,例-011,终端输出时终端输出时printf中的格式为中的格式为%o(字母字母o)第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 十六进制整数:十六进
8、制整数:由正负号与由正负号与0F共共16个字个字符组成,此类常数最前面要由数字符组成,此类常数最前面要由数字0和字和字母母x 引导,如:引导,如:-0 x12,输出函数输出函数printf 中格式规定为中格式规定为%x。二、整型变量:二、整型变量:有四类:有四类:int,short(int),long(int),unsigned(int)或:或:unsigned(short)、unsigned(long)。第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 各类型各类型整型变整型变量所占量所占内存字内存字节数,节数,在在C语言语言中没有中没有统一规统一规定,看定,看 P113表表2
9、.1类型类型比 特比 特数数bit最小取值范围最小取值范围signed int16-3276832767 即即-215(215-1)Unsigned int 16065535即即0(216-1)signed short int16-3276832767即即-215(215-1)Unsigned short int16065535即即0(216-1)long int32-2 1 4 7 4 8 3 6 4 8 2147483647即即-231(231-1)Unsigned longint3204294967295 即即0(232-1)第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式
10、 三、整型常量与变量的关系:三、整型常量与变量的关系:1常量在常量在-215215-1之间可以赋给之间可以赋给int和和long int型变量(型变量(16位)。位)。2常量在常量在-231231-1之间可以赋给之间可以赋给long int型变量型变量(32位)。位)。3若若short型长度与型长度与int数范围相同,则它们可互数范围相同,则它们可互相赋值。相赋值。4非负的整常量可以赋给相应的非负的整常量可以赋给相应的unsigned变量。变量。5在一个整常量后面加字母在一个整常量后面加字母l或或L,则此整常则此整常 量被认为是量被认为是long型常量。型常量。第二章第二章 数据类型、运算符与
11、表达式数据类型、运算符与表达式 2.4 实型数据实型数据一、实型常量:一、实型常量:有两种表示方法:有两种表示方法:1.十进制表示形式:由小数点、正负号和十个数字表示,十进制表示形式:由小数点、正负号和十个数字表示,必须有小数点,且小数点最前面和最后面的必须有小数点,且小数点最前面和最后面的0均可省,均可省,但两者不可同时省略。但两者不可同时省略。2指数形式指数形式(科学计数法科学计数法):由数字、正负号、:由数字、正负号、小数点和字母小数点和字母e或或E组成。要求字母组成。要求字母e或或E之之 前必须有数字前必须有数字(1也不可省也不可省),e或或E后面的数字后面的数字 必须为整数必须为整数
12、(可带正负号可带正负号)、此数字代表、此数字代表10的的 幂次。幂次。例:例:123E3=123 103第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 二、实型变量:(浮点数)二、实型变量:(浮点数)有有float和和double两种。其中:两种。其中:float实数提供实数提供7位有效数字,赋值时当多余位有效数字,赋值时当多余7位数字,则位数字,则7位以上的数字不被变量接收。位以上的数字不被变量接收。float实数一般在内存中占实数一般在内存中占4个字节。(个字节。(32位)位)double变量可接受大约变量可接受大约16个十进制数,在内个十进制数,在内存中占存中占8个字节。
13、个字节。long double有效数字为有效数字为19位,占位,占16个字节。个字节。第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 三、三、整数与浮点数的转换:整数与浮点数的转换:规定:如果将一个浮点数赋给整型变量,规定:如果将一个浮点数赋给整型变量,则系统自动将该浮点数的小数部分截取。则系统自动将该浮点数的小数部分截取。如果将一个整数赋给实型变量,则在如果将一个整数赋给实型变量,则在 数值上不会引起任何变化。数值上不会引起任何变化。实型数据的舍入误差:实型数据的舍入误差:第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 main()()float a,b;a=
14、123456.789e5;b=a+20;printf(“%f”,b););输出结果为:输出结果为:123456788848.000000注意:注意:应当避免将一个很大的数和一个很小的应当避免将一个很大的数和一个很小的 数直接相加减,否则就会数直接相加减,否则就会“丢失丢失”小数。小数。第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 2.5 字符型数据字符型数据一、字符常量:一、字符常量:有两类:有两类:1单个的单个的ASCII字符:用单引号引起来,在内字符:用单引号引起来,在内 存中以存中以ASCII码值的形式存储,看码值的形式存储,看P374附录附录。2以反斜杠以反斜杠“”开
15、头的字符系列:他们是一开头的字符系列:他们是一些些 特殊字符的转义字符,特殊字符的转义字符,看看P48表表3.3。第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 字符形式字符形式含义含义ASCII代码代码n换行,将当前光标位置移到下换行,将当前光标位置移到下一行开头一行开头10t水平制表(跳到下一个水平制表(跳到下一个tab位置)位置)9b退格,将当前位置移到前一列退格,将当前位置移到前一列8r回车,将当前位置移到本行开回车,将当前位置移到本行开头头13f换页,将当前位置移到下页开换页,将当前位置移到下页开头头12反斜杠字符反斜杠字符“”92单引号(撇号)字符单引号(撇号)字符
16、39双引号字符双引号字符34ddd1到到3位位8进制数所代表的字符进制数所代表的字符 xhh1到到2位位16进制数所代表的字符进制数所代表的字符 第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 例例2 转义字符的使用转义字符的使用。main()printf(abctderftgn);printf(htibbjk);程序运行时在显示屏上得到的结果是:程序运行时在显示屏上得到的结果是:fgdehjk程序运行时在打印机上得到的结果是:程序运行时在打印机上得到的结果是:fabcgdehjik第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 二、字符变量:二、字符变量:用用
17、char定义定义 每一个字符变量只能存放一个字符,不能存每一个字符变量只能存放一个字符,不能存 放字符串,字符串需用数组来存放。放字符串,字符串需用数组来存放。可以给字符变量赋可以给字符变量赋0255的正整数。因为这的正整数。因为这 是是ASCII码值。码值。字符变量显示时,可用格式字符变量显示时,可用格式%c显示字符本显示字符本身,身,也可用也可用%d显示字符的显示字符的ASCII码值。码值。(若定义(若定义为为signed字符变量时,当字符变量时,当ASCII值在值在0127时显示时显示ASCII码值,若码值,若ASCII值在值在128255时显示时显示-128-1)。)。第二章第二章 数
18、据类型、运算符与表达式数据类型、运算符与表达式 例例3 3 向字符变量赋以整数。向字符变量赋以整数。main()char cl,c2;cl=97;c2=98;printf(%c%cn,cl,c2);printf(%d%dn,cl,c2);程序运行时输出结果是:程序运行时输出结果是:a b 97 98第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 例例4 大小写字母的转换。大小写字母的转换。main()char cl,c2;cl=a;c2=b;cl=cl-32;c2=c2-32;printf(%c%c,cl,c2);程序运行时输出结果是:程序运行时输出结果是:A B第二章第二章
19、数据类型、运算符与表达式数据类型、运算符与表达式 三、字符串常量与变量:三、字符串常量与变量:字符串常量:字符串常量:用双引号引起来的字符序列。用双引号引起来的字符序列。字符串在内存中存放时,系统会自动为字符字符串在内存中存放时,系统会自动为字符 串末尾加上结束符串末尾加上结束符O,O,但书写时不加但书写时不加O,O,显显 示也不会出现任何操作。例:示也不会出现任何操作。例:aa与与“a”a”不同。不同。其中:其中:aa在内存中以一个字节在内存中以一个字节6161H(97)H(97)存储,存储,“a”a”用用2 2个字节个字节6161H H和和0000H H存储。存储。字符串常量值若要存放在变
20、量中,必须用字符字符串常量值若要存放在变量中,必须用字符 数组来存放。做数组来存放。做P P6666 习题习题3.63.63.83.8。第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 例例5 写出以下程序运行的结果。写出以下程序运行的结果。main()char cl=a,c2=b,c3=c;char c4=101,c5=116;printf(a%cb%ctc%ctabcn,cl,c2,c3);printf(tb%c%c,c4,c5);程序的运行结果为:程序的运行结果为:aabbccabc AN 第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 例例6 要将要将“C
21、hina”译成密码,密码规律是:用原译成密码,密码规律是:用原 来的字母后面第个字母代替原来的字母。来的字母后面第个字母代替原来的字母。例如,字母例如,字母“”后面第个字母是后面第个字母是“”,用,用 “”代替代替“”。因此,。因此,“China”应译为应译为 “Glmre”。请编一程序,用赋初值的方法使请编一程序,用赋初值的方法使 c1、c2、c3、c4、c5五个变量的值分别为五个变量的值分别为、h、i、n、a,经过运算,使经过运算,使c1、c2、c3、c4、c5分别变为分别变为G、l、m、r、e,并并 输出。输出。第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 main()
22、char c1=C,c2=h,c3=i;char c4=n,c5=a;c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;printf(密码是密码是%c%c%c%c%cn,c1,c2,c3,c4,c5);程序的运行结果为:程序的运行结果为:密码是密码是 Glmre第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 例例7 例例3 3能否改成如下:运行时显示什么内容?能否改成如下:运行时显示什么内容?为什么?为什么?main()int cl,c2;(原为原为char cl,c2)cl=97;c2=98;printf(%c%cn,cl,c2);printf(%d%dn,cl,c
23、2);解:可以。因为在可输出的字符范围内,使解:可以。因为在可输出的字符范围内,使 用整型和使用字符型作用相同。用整型和使用字符型作用相同。第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 2.6 变量的赋值变量的赋值程序中常需要对变量赋予初值,程序中常需要对变量赋予初值,C中赋初值中赋初值的方法有以下几种:的方法有以下几种:在定义变量的同时赋值。在定义变量的同时赋值。例:例:float b=3.14;int a,b,c=5;在变量定义之后再为变量赋值。在变量定义之后再为变量赋值。例:例:int a,b,c;a=1;定义变量的同时可同时给多个变量赋初值。定义变量的同时可同时给多个
24、变量赋初值。例:例:int a=b=c=1;(TC不承认)不承认)第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 2.7 各类数值型数据之间的转各类数值型数据之间的转C中允许中允许int,float,double和和char型数据混合运算,运算时首型数据混合运算,运算时首先必须将不同类型转化为同先必须将不同类型转化为同一类型方可进行运算,转化一类型方可进行运算,转化的规则见右图的规则见右图,转化过程由系转化过程由系统自动进行。统自动进行。图中横向向左的箭头是运图中横向向左的箭头是运算过程中必定要进行的转化过算过程中必定要进行的转化过程(运算对象相同也要转化)。程(运算对象相同也
25、要转化)。图中纵向箭头表示当运算对图中纵向箭头表示当运算对象为不同类型时的转化方向。象为不同类型时的转化方向。doublefloat long unsigned int char,short高高低低第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 2.8 算术运算符和算术表算术运算符和算术表达达一、一、C运算符简介:看运算符简介:看 P55和和 P365附录附录C二、算术运算符和算术表达式:二、算术运算符和算术表达式:1.基本的算术运算符:基本的算术运算符:+,-,*,/,%(模模,求余求余)对于除法(对于除法(/)运算:若两个正整数相除,则)运算:若两个正整数相除,则 结果为结
26、果为正正整数(舍去小数部分)整数(舍去小数部分)例:例:7/3=2 若不同符号的两个整数相除,结果为负整数,若不同符号的两个整数相除,结果为负整数,小数舍入方向不固定,有的系统采用小数舍入方向不固定,有的系统采用四舍五入四舍五入第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 有的采用有的采用“向零取整向零取整”。例:。例:-5/3=-1.67 有的有的系系 统给出统给出-2,有的给出,有的给出-1,多数系统采用后种。,多数系统采用后种。除法运算中,只要有一数为实型,则所有数除法运算中,只要有一数为实型,则所有数 和结果均为和结果均为double 型。型。模运算符模运算符%:只能
27、用于:只能用于int型数,即两个数型数,即两个数均均 为为int型。要求运算结果与型。要求运算结果与被除数同符号被除数同符号。例如:例如:7%3=1,-5%3=-2,5%(-3)=2。第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 此类运算符要求所有运算分量都必须是算术此类运算符要求所有运算分量都必须是算术 类型。类型。(int,float 或或 double)2算术运算符的优先级与结合性算术运算符的优先级与结合性优先级:优先级:先先*、/、%,后,后+、,、,但但+,-号用号用于单目运算时其优先级最高,用于双目于单目运算时其优先级最高,用于双目 运算时优先级最低,同级运算符按
28、规运算时优先级最低,同级运算符按规 定的结合方向处理。定的结合方向处理。结合方向:结合方向:自左至右,具有自左至右,具有左左结合性,即运算结合性,即运算时由左向右计算。(先处理操作对象左边的时由左向右计算。(先处理操作对象左边的运算符,再处理右边的运算符)运算符,再处理右边的运算符)第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 注:注:双双目运算符中,除赋值运算符为右结合目运算符中,除赋值运算符为右结合 外,其余均为外,其余均为左左结合。结合。大部分大部分单单目运算符均为目运算符均为右右结合。结合。豆号豆号运算符为运算符为左左结合。结合。条件条件运算符为运算符为右右结合。结合
29、。三、强制类型转换运算符:三、强制类型转换运算符:功能:这样的运算符可以将表达式的值强制转功能:这样的运算符可以将表达式的值强制转换为所需类型(当系统不能实现自动转换换为所需类型(当系统不能实现自动转换 的情况下使用)。的情况下使用)。第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 形式为:形式为:(类型名)(类型名)(表达式)(表达式)例:例:(double)a,(int)(x+y),(float)(7%4)注意:在运行强制类型转换时,得到一个所需注意:在运行强制类型转换时,得到一个所需类型的中间变量,而原变量的类型不发生变类型的中间变量,而原变量的类型不发生变化。化。第二章
30、第二章 数据类型、运算符与表达式数据类型、运算符与表达式 例例1:main()()float x=3.6,y=6.7;float i;i=(int)()(x+y););printf(“x=%f,y=%f,i=%f”,x,y,i););运行结果为:运行结果为:x=3.60000,y=6.700000,i=10.000000第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 3.9求下面算术表达式的值。求下面算术表达式的值。(1)x+a%3*(int)(x+y)%2/4 设设x=2.5,a=7,y=4.7(2)(float)(a+b)/2+(int)x%(int)y 设设a=2,b=3
31、,x=3.5,y=2.52.53.5第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 功能:使自功能:使自变量变量的值加的值加1或减或减1。格式:格式:+i;-i;功能为在使用功能为在使用i值之前先使值之前先使i的的 值加值加1(或减(或减1)例:例:i=3;j=+i;则有:则有:j=4;i=4 i+;i-;功能为先使用功能为先使用i的值,之后再的值,之后再 使使i的值加的值加1(或减(或减1)例:例:i=3;j=i+;则有:则有:j=3;i=4四、自增自减运算符:四、自增自减运算符:+或或-第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式+或或-是单个运算符,所以
32、他们之中不能有空是单个运算符,所以他们之中不能有空 格,否则会被看成两个格,否则会被看成两个+或两个或两个-对待。对待。+或或-运算符只能用于变量,而不能用于常量运算符只能用于变量,而不能用于常量 和表达式,如和表达式,如5+或或(a+b)均违法。均违法。自增自减运算符有副作用,因为此类运算符在自增自减运算符有副作用,因为此类运算符在 运算时不仅可以向外提供一个值,而且同时还运算时不仅可以向外提供一个值,而且同时还 改变了运算分量自身的值,正确使用可使程序改变了运算分量自身的值,正确使用可使程序 简练,使用不当会出现意想的结果。简练,使用不当会出现意想的结果。第二章第二章 数据类型、运算符与表
33、达式数据类型、运算符与表达式 例例2:x=+i+i;对于第一对于第一i个,其值先加个,其值先加1,对于第二个,对于第二个i值,值,是使用自加前的是使用自加前的i值还是使用自加后的值还是使用自加后的i值,值,与具体实现有关,结果不确定。所以编程与具体实现有关,结果不确定。所以编程 时尽可能将此副作用隔离,使之仅在一个时尽可能将此副作用隔离,使之仅在一个 小范围内起作用。小范围内起作用。如上面语句可改为:如上面语句可改为:+i;x=i+i;或或x=2*(+i)第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 例例3:k=(i+)+(i+)+(i+),设设i=3 在在Turbo C 和
34、和 ms C上:上:k=(+i)+(+i)+(+i),设设i=3 在在Turbo C 和和 ms C上上:当表达式中连续出现多个当表达式中连续出现多个+或或-时,时,C编译在处编译在处 理时尽可能多的自左而右将若干个字符组成理时尽可能多的自左而右将若干个字符组成 一个运算符。(希望避免此类写法,以免造一个运算符。(希望避免此类写法,以免造 成误解)成误解)k=9,i=6k=18,i=6第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 例例4:x=i+j;理解为:理解为:x=(i+)+j;最好写成最好写成:x=(i+)+j;或:或:x=i+j;函数调用时,实参数的求值顺序因不同的系
35、函数调用时,实参数的求值顺序因不同的系 统而不同,要注意上机试试。统而不同,要注意上机试试。例例5:printf(“%d,%d”,i,i+);设设i=3 自左至右自左至右求值顺序的系统输出结果为:求值顺序的系统输出结果为:3,3 自右至左自右至左求值顺序的系统输出结果为:求值顺序的系统输出结果为:4,3,TC为此结果。为此结果。第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 +和和-为右结合性。为右结合性。例例6:printf(“%d”,-i+);当当i=3时问上述语句执行后的结果及时问上述语句执行后的结果及i的值。的值。输出结果:输出结果:-3,但,但i变为变为+4,先使用,
36、先使用i值后值后 自加自加 右结合时,右结合时,-i+相当于:相当于:-(i+)而左结合时,而左结合时,-i+相当于:(相当于:(-i)+第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 2.9 赋值运算符和赋值表达式赋值运算符和赋值表达式一、简单赋值运算符一、简单赋值运算符“=”及其表达式:及其表达式:此运算符功能为:将赋值号右边的常量或变量此运算符功能为:将赋值号右边的常量或变量或表达式的值赋给左边的变量。或表达式的值赋给左边的变量。赋值时注意类型转换:赋值时注意类型转换:float型数据赋给型数据赋给int型变量,则小数自动舍弃。型变量,则小数自动舍弃。int型数据赋给型数
37、据赋给float型变量,数值不变,以浮型变量,数值不变,以浮 点形式存到变量中。点形式存到变量中。第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 char型数据赋给型数据赋给int型变量:一般将符号位扩展到高型变量:一般将符号位扩展到高8位,但对于位,但对于unsigned int最高位补最高位补0。带符号的带符号的int型数据赋给型数据赋给long int型变量:,对型变量:,对long int型的高型的高16位进行扩展。位进行扩展。无符号数无符号数unsigned int赋给赋给long int 型变量,最高位型变量,最高位补补0即可。即可。将符号数赋给长度相同的无符号变量
38、时,数值将符号数赋给长度相同的无符号变量时,数值(连同符号)原样照赋,只是赋值后,原来数值(连同符号)原样照赋,只是赋值后,原来数值中的符号(例负号),现在变为数值的最高位了。中的符号(例负号),现在变为数值的最高位了。第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 二、复合赋值运算符二、复合赋值运算符:有十类:有十类它们的格式为:算术运算符或位运算符再加它们的格式为:算术运算符或位运算符再加上上=”,共有以下,共有以下10种:种:+=,-=,*=,/=,%=,=,=,&=,|=功能:先计算,再赋值。功能:先计算,再赋值。例:例:x*=y+8 x=x*(y+8)第二章第二章 数
39、据类型、运算符与表达式数据类型、运算符与表达式 三、赋值运算符的结合方向:三、赋值运算符的结合方向:结合方向为:自右至左,具有结合方向为:自右至左,具有右右结合性结合性例例1:设:设a=12,计算赋值运算计算赋值运算a+=a-=a*a后后a的值的值=?解:上面表达式要经过两步计算,如下计算过程:解:上面表达式要经过两步计算,如下计算过程:先计算先计算a-a*aa:所以所以a=a-a*a=12-12*12=-132再计算再计算a+aa:此时此时 a=-132 所以所以 a=a+a=-132+(-132)=-264第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 3.12 写出下面表
40、达式运算后写出下面表达式运算后a a的值,设原来的值,设原来a a。设设a a和和n n已定义为整型变量。已定义为整型变量。(1)a+=a (2)a-=2 (3)a*=2+3 (4)a/=a+a (5)a%=(n%=2),n的值等于的值等于5 5 (6)a+=a-=a*=a241060000第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 逗号表达式:由逗号运算符连接起来的表达式逗号表达式:由逗号运算符连接起来的表达式 称为逗号表达式。称为逗号表达式。功能:连接两个或两个以上的表达式。功能:连接两个或两个以上的表达式。格式为:表达式格式为:表达式1,表达式,表达式2,表达式,表达
41、式n。注:整个逗号表达式的值是所有表达式中最注:整个逗号表达式的值是所有表达式中最 后一个表达式后一个表达式n的值;的值;例例1:x=a=3,6*a;此逗号表达式的值为此逗号表达式的值为18,但,但x=3第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 例例2.x=(a=3,6*a);此赋值表达式的值为此赋值表达式的值为18,且,且x=18,即将逗号即将逗号 表达式的值赋给表达式的值赋给x。并非所有地方的逗号均为运算符,要会分辨。并非所有地方的逗号均为运算符,要会分辨。看下面两个看下面两个printf中中(a,b,c)的区别的区别printf(“%d,%d,%d”,a,b,c););printf(“%d,%d,%d”,(,(a,b,c),),b,c););第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式 所学运算符的优先级所学运算符的优先级括号括号单单目目运算符(运算符(+、):、):右右结合结合双目运算符(双目运算符(*、/、%、+、):、):左左结合结合赋值运算符:赋值运算符:右右结合结合豆号运算符(豆号运算符(,):):左左结合结合高高低低