1、第二章第二章 C C语言的基本数据类型与表达式语言的基本数据类型与表达式 2.1 C语言的基本数据类型 2.2 常量和变量 2.3 运算符与表达式 2.4 数据类型转换C语言程序设计教程2022/12/202带符号数的表示带符号数的表示 数有正负,在计算机中用数有正负,在计算机中用0表示正,用表示正,用1表示负。通常的做法是:用一个表示负。通常的做法是:用一个数的最高位来表示符号,若一个机器数(在计算机中使用的、连同数符一起数的最高位来表示符号,若一个机器数(在计算机中使用的、连同数符一起数字化了的数)的最高位为数字化了的数)的最高位为0,表示其是一个正数,否则是一个负数。,表示其是一个正数,
2、否则是一个负数。计算机中对带符号数有原码、补码、反码三种形式。计算机中对带符号数有原码、补码、反码三种形式。原码规则为:原码规则为:符号位遵循上述规则。符号位遵循上述规则。正数和负数的数值部分均用其绝对值的二进制表示。正数和负数的数值部分均用其绝对值的二进制表示。补码规则为:补码规则为:符号位遵循上述规则。符号位遵循上述规则。正数的数值部分就是该数的二进制。正数的数值部分就是该数的二进制。负数的数值部分为该数的绝对值的二进制按位取反后加负数的数值部分为该数的绝对值的二进制按位取反后加1。C语言程序设计教程2022/12/203ASCII码码 字符是计算机中最多的信息形式之一,是人与计算机进行通
3、信、字符是计算机中最多的信息形式之一,是人与计算机进行通信、交互的重要媒介。在计算机中,要为每个字符指定一个确定的编码,交互的重要媒介。在计算机中,要为每个字符指定一个确定的编码,作为识别与使用这些字符的依据。国际上使用最多的字符符号总数不作为识别与使用这些字符的依据。国际上使用最多的字符符号总数不超过超过128种,可用种,可用7位二进制位的不同编码表示,美国信息交换标准码位二进制位的不同编码表示,美国信息交换标准码(American Standard Code for Information Interchange),简称),简称ASCII码,得到广泛的应用。码,得到广泛的应用。标准的标准的
4、ASCII码是码是7位码,用位码,用1个字节表示,最高位总是个字节表示,最高位总是0,可以表,可以表示示128个字符。个字符。扩展的扩展的ASCII码是码是8位码,也是一个字节表示,其前位码,也是一个字节表示,其前128个码与标准个码与标准的的ASCII码是一样的,后码是一样的,后128个码(最高位为个码(最高位为1)则有不同的标准。则有不同的标准。C语言程序设计教程2022/12/2042.1 C2.1 C语言的基本数据类型语言的基本数据类型数据类型概述:第2章 C语言的基本数据类型与表达式 在程序中要指定数据的类型和数据的组织形式,即数据结构。在程序中要指定数据的类型和数据的组织形式,即数
5、据结构。C语言中的数据类型语言中的数据类型分类如下:分类如下:C C语言中的数据,有语言中的数据,有常量常量和和变量变量之分,它们分别属于上述之分,它们分别属于上述这些这些类型。类型。字符字符型(型(charchar)整型整型(short,int,long,unsignedshort,int,long,unsigned)单精度型(单精度型(floatfloat)实型实型 双精度型(双精度型(doubledouble)枚举类型(枚举类型(enumenum)数组类型(数组类型()构造类型构造类型 结构体类型(结构体类型(structstruct)共用体类型(共用体类型(unionunion)指针类
6、型(指针类型(*)空类型(空类型(voidvoid)基本类型基本类型数据类型数据类型C语言程序设计教程2022/12/2051 1、常量:常量:(1)(1)十进制形式十进制形式:与数学上的整数表示相同;与数学上的整数表示相同;例如例如:12,-100,0:12,-100,0(2)(2)八进制形式八进制形式:在数码前加数字在数码前加数字0;0;(八进制的数码范围为八进制的数码范围为07)例如例如:012=1:012=1*8 81 1+2+2*8 80 0=10(=10(十进制)十进制)(3)(3)十六进制形式十六进制形式:在数码前加在数码前加0X0X(数字数字0和字母和字母X)。)。例如例如:0
7、 x12=1:0 x12=1*16161 1+2+2*16160 0=18(=18(十进制)十进制)一、整型第2章 C语言的基本数据类型与表达式2、分类:分类:根据数据所占的二进制位数分为根据数据所占的二进制位数分为:int、shortint、longint。在在Turbo C中,中,short占占2个字节,个字节,int占占2个字节,个字节,long占占4个字节个字节。同样。同样存储长度的数据又分存储长度的数据又分unsigned、signed;故可组合出六种类型。故可组合出六种类型。C语言程序设计教程2022/12/2063.3.整型数据在内存中的存放形式整型数据在内存中的存放形式以二进制
8、补码的形式存放。以二进制补码的形式存放。如整数如整数1212在内存中的实际存放情况下图所示:在内存中的实际存放情况下图所示:整数整数1212在内存中的存放示意图在内存中的存放示意图 正数的补码:正数的补码:与原码相同与原码相同 负数的补码负数的补码:负数负数取绝对值取绝对值二进制二进制按位取反按位取反 再加再加11补码补码 注意:注意:若一个整数后没有若一个整数后没有l l或或L L,则表示其是基本整型,占,则表示其是基本整型,占2 2个字个字 节,否则表示其是长整型,占节,否则表示其是长整型,占4 4个字节。个字节。如:如:1212在内存中占在内存中占2 2个字节,而个字节,而12L12L则
9、占则占4 4个字节。个字节。0000000000001010C语言程序设计教程2022/12/2073 3的原码的原码 按位取反按位取反 加加1 1 得得-3-3的补码的补码 由此可知,在整数的由此可知,在整数的1616位中,最左边的一位为符号位,位中,最左边的一位为符号位,为为0 0,表示数值为正;为,表示数值为正;为1 1,表示数值为负,表示数值为负000000000000010111111111111110101111111111111110例如:求例如:求-3在内存中的存放形式在内存中的存放形式C语言程序设计教程2022/12/2084、值域:值域:由机器中数据的存储长度决定。由机器中
10、数据的存储长度决定。关键字关键字 所占位数所占位数 取值范围取值范围 short 16 short 16 -32768-327683276732767(即(即-2-215152 21515-1)-1)unsigned short 16 unsigned short 16 0 065535 65535(即(即0 02 21616-1)-1)int int 16 16 -32768-327683276732767 unsigned int unsigned int 16 16 0 06553565535 long 32 -2147483648 long 32 -214748364821474836
11、472147483647 unsigned long 32 unsigned long 32 0 042949672954294967295C语言程序设计教程2022/12/2095、整型数据的溢出:整型数据的溢出:不同的整型数据有不同的取值范围,在程序运行过不同的整型数据有不同的取值范围,在程序运行过程中,如果出现数值超出整型数据的允许值范围,就会程中,如果出现数值超出整型数据的允许值范围,就会出现出现“溢出溢出”。例如:例如:一个一个int型的变量的最大值为型的变量的最大值为(215-1)=32767,如如果再加果再加1,则产生溢出则产生溢出,其结果为其结果为:-215=-32768100
12、000000000000032767-327680111111111111111C语言程序设计教程2022/12/20101 1、常量:常量:(1)(1)十进制小数形式:十进制小数形式:由数字和小数点组成;由数字和小数点组成;例如例如:3.4,4.,.3:3.4,4.,.3。(2)(2)指数形式:指数形式:“十进制小数十进制小数”+“e(+“e(或或E)”+“E)”+“十进制数整十进制数整数数”。例如例如:12.5e-6:12.5e-6 表示表示12.512.51010-6 e e或或E E的两边必须有数,且其后面必须为整数;的两边必须有数,且其后面必须为整数;如:如:6E0.2 6E0.2
13、e5e5 2、分类:分类:关键字关键字 字节数字节数 取值范围取值范围 有效数字有效数字 float 4 float 4 3.43.41010-38 3.43.4101038 6 7 7 double 8 double 8 1.71.71010-308 1.71.71010308 1516注意注意第2章 C语言的基本数据类型与表达式二、实型C语言程序设计教程2022/12/20111 1、字符常量字符常量:(1)(1)用单引号括起来的一个字符;如:用单引号括起来的一个字符;如:A、1、?等等。(2)(2)用单引号括起来的由反斜杠用单引号括起来的由反斜杠()引导的转义字符。引导的转义字符。转义是
14、指在源程序中碰到这种字符组合时,反斜杠的转义是指在源程序中碰到这种字符组合时,反斜杠的意义已经发生转变,变成控制代码和具有某些特殊用途的意义已经发生转变,变成控制代码和具有某些特殊用途的单个字符。如:单个字符。如:nn 字符形式字符形式 功能功能 n n 换行换行 t t 横向跳格横向跳格 b b 退格退格 r r 回车回车 反斜杠字符反斜杠字符 单引号字符单引号字符 ddd 8ddd 8进制数表示的进制数表示的ASCIIASCII码对应的字符码对应的字符 xhh 16xhh 16进制数表示的进制数表示的ASCIIASCII码对应的字符码对应的字符第2章 C语言的基本数据类型与表达式三、字符类
15、型C语言程序设计教程2022/12/20122、分类:分类:char char 和和 unsigned charunsigned char;3 3、变量值的存储变量值的存储 字符数据在内存中存储的是字符的字符数据在内存中存储的是字符的ASCII码码 一个无一个无符号的整数,其形式与整数的存储形式一样。符号的整数,其形式与整数的存储形式一样。例如:字符例如:字符AA的的ASCIIASCII码为码为65,65,在内存中的存放形式为:在内存中的存放形式为:由一个大写字母的由一个大写字母的ASCII码可以很容易的得出其对应的小写码可以很容易的得出其对应的小写字母的字母的ASCII码,他们之间相差码,他
16、们之间相差32:小写字母的:小写字母的ASCII码大。码大。比比如:如:A的的ASCII码为码为65,则,则a的的ASCII码为码为97。同样还可以很容易的得出其它大写字母的同样还可以很容易的得出其它大写字母的ASCII码,相邻的码,相邻的两个大写字母的两个大写字母的ASCII码相差码相差1。比如:。比如:D的的ASCII码为码为68。第2章 C语言的基本数据类型与表达式 知道了知道了字符字符A A的的ASCIIASCII码则码则A A可以表示为可以表示为:AA、x41x41、101101。0 1000001C语言程序设计教程2022/12/2013 0 0110000 又如:字符又如:字符0
17、0的的ASCIIASCII码为码为48,48,在内存中的存放形式为:在内存中的存放形式为:而整数0在内存中的存放形式为:0 0000000 数字字符与数字是两个不同的概念,它们相差48,也即:字符0整数0+整数48。同样,知道任何一个数字字符的ASCII码,可以很容易的得出其它数字字符的ASCII码,相邻的两个数字字符之间ASCII码相差1。C语言程序设计教程2022/12/20144 4、字符串:字符串:是用一对双引号括起来的字符序列。是用一对双引号括起来的字符序列。如:如:“SHANGHAI”SHANGHAI”,“AbcdeFGHijkAbcdeFGHijk”,“How are you”H
18、ow are you”。字符串中字符的个数称为字符串长度。长度为字符串中字符的个数称为字符串长度。长度为0 0的字符的字符串(即一个字符都没有的字符串)称为空串,表示为串(即一个字符都没有的字符串)称为空串,表示为“”“”(一对紧连的双引号)。例如(一对紧连的双引号)。例如“How do you do.”How do you do.”、“Good morning.”Good morning.”等,都是字符串常量,其长度分别为等,都是字符串常量,其长度分别为1414和和1313(空格也是一个字符)。(空格也是一个字符)。如果反斜杠和双引号作为字符串中的有效字符,则必如果反斜杠和双引号作为字符串中
19、的有效字符,则必须使用转义字符。须使用转义字符。例如例如 (1 1)C:msdosv6.22 C:msdosv6.22C:msdosv6.22 C:msdosv6.22 (2 2)I say:Goodbye!I say:Goodbye!“I say:Goodbye!I say:Goodbye!“注意注意 a a与与“a”a”的区别。的区别。C语言程序设计教程2022/12/2015一、常量与符号常量 常量常量是指在程序运行中是指在程序运行中,其数值不能被改变的量。其数值不能被改变的量。常量常量又可分为直接常量和符号常量。又可分为直接常量和符号常量。第2章 C语言的基本数据类型与表达式2.2 2
20、.2 常量与变量常量与变量C语言程序设计教程2022/12/2016 120、-100、0;0120、072;0 xFFFF、0 x1e、0X28AF,0XED4;120L,200L;长整型常量长整型常量 3.14、-3.1、5.12E-6;a、#、n、101;099、12f、0 xg、48EA、0 x28aL;019.5、1e-08;2.1E10.2、E-6、6.4E+4.8、E9;changsha、+?ab;、p、ab;第2章 C语言的基本数据类型与表达式1、直接常量:直接常量:是在程序中直接引用的数据。是在程序中直接引用的数据。请判断这些常量正确与否:请判断这些常量正确与否:C语言程序设
21、计教程2022/12/2017 120、-100、0;0120、072;0 xFFFF、0 x1e、0X28AF,0XED4;120L,200L;长整型常量长整型常量 3.14、-3.1、5.12E-6;a、#、n、101;099、12f、0 xg、48EA、0 x28aL;019.5、1e-08;2.1E10.2、E-6、6.4E+4.8、E9;changsha、+?ab;、p、ab;C语言程序设计教程2022/12/20182、符号常量符号常量 是是用标用标识符来表示一个数据;识符来表示一个数据;在程序不能给它赋值。在程序不能给它赋值。定义形式定义形式:#define 标识符标识符 常量数
22、据常量数据 例如例如:#define PI 3.14159 在程序预处理时,凡是出现标识符在程序预处理时,凡是出现标识符PI的地方都将用的地方都将用数据数据3.14159来替换。来替换。如如:2*2.3*PI 就就等价于等价于 2*2.3*3.14159。第2章 C语言的基本数据类型与表达式二、变量1.1.变量的概念变量的概念 变量是指以标识符为名字,变量是指以标识符为名字,在程序运行过程中,其值在程序运行过程中,其值可以被改变的量称为变量。可以被改变的量称为变量。2.2.变量的两个要素变量的两个要素 C语言程序设计教程2022/12/2019(1)变量名。每个变量都必须有一个名字)变量名。每
23、个变量都必须有一个名字变变量名,变量命名遵循标识符命名规则。量名,变量命名遵循标识符命名规则。(2)变量值。在程序运行过程中,变量值存储)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。在内存中。在程序中,通过变量名来引用变量的值。说明:说明:标识符命名的良好习惯标识符命名的良好习惯见名知意:见名知意:所谓所谓“见名知意见名知意”是指,通过变量名就知道变量是指,通过变量名就知道变量值的含义。通常应选择能表示数据含义的英文单词值的含义。通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。(或缩写)作变量名,或汉语拼音字头作变量名。例如,
24、例如,name/xm(姓名)、(姓名)、sex/xb(性别)、(性别)、age/nl(年龄)、(年龄)、salary/gz(工资)。(工资)。C语言程序设计教程2022/12/20203.3.变量的定义与初始化变量的定义与初始化在语言中要求对所有用到的变量,必须先定义、后使在语言中要求对所有用到的变量,必须先定义、后使用;且称在定义变量的同时进行赋初值的操作为变量初始化。用;且称在定义变量的同时进行赋初值的操作为变量初始化。(1)定义定义形式:形式:类型标识符类型标识符 变量变量名名1,变量名变量名2,变量名变量名3.;例如例如:int a,b,c;float x,y;char c1,c2;或
25、或 int c1,c2;自己设定,满足自己设定,满足标识符的规定。标识符的规定。如:如:int,int,float,charfloat,char;不可省不可省(2)变量变量初始化初始化 在说明变量的同时给变量一个初始值。在说明变量的同时给变量一个初始值。int a=5,b=3;int a=5,b=3;int a=b=c=3;int a=b=c=3;int a=3,b=3,c=3;int a=3,b=3,c=3;例如例如C语言程序设计教程2022/12/2021 一、一、C C语言的运算符语言的运算符简介简介 按操作功能,按操作功能,C C语言中的运算符大语言中的运算符大致可分为右边的致可分为右
26、边的1212大类大类 第2章 C语言的基本数据类型与表达式2.3 2.3 运算符与表达式运算符与表达式算术运算符算术运算符 +-+-*/%/%关系运算符关系运算符 =!=!=逻辑运算符逻辑运算符 !&位运算符位运算符|&|&赋值运算符赋值运算符 =条件运算符条件运算符?:逗号运算符逗号运算符 ,指针运算符指针运算符 *和和&求字节数运算符求字节数运算符 sizeofsizeof强制类型转换运算符强制类型转换运算符分量运算符分量运算符 下标运算符下标运算符 C语言程序设计教程2022/12/20221 1、运算符的优先级与结合性、运算符的优先级与结合性 优先级别:它决定了运算符的运算顺序,即优先
27、级高的运算符先优先级别:它决定了运算符的运算顺序,即优先级高的运算符先运算,优先级低的运算符后运算。运算,优先级低的运算符后运算。结合规则:规定了连续几个具有相同优先级运算符的运算顺序,结合规则:规定了连续几个具有相同优先级运算符的运算顺序,即优先级相同的由结合规则来决定运算顺序。即优先级相同的由结合规则来决定运算顺序。自左至右的结合方向,称为左结合性。反之,称为右结合性。自左至右的结合方向,称为左结合性。反之,称为右结合性。结合性是语言的独有概念。结合性是语言的独有概念。2 2、表达式求值、表达式求值(表达式是由运算符和括号将操作数(表达式是由运算符和括号将操作数连接起来,符合连接起来,符合
28、C C语言规语言规则的式子,其值为数值型数据则的式子,其值为数值型数据)1)按运算符的优先级高低次序执行。例如,先乘除后加减。)按运算符的优先级高低次序执行。例如,先乘除后加减。2)如果在一个运算对象(或称操作数)两侧的运算符的优先级相)如果在一个运算对象(或称操作数)两侧的运算符的优先级相同同,则按语言规定的结合方向(结合性)进行。,则按语言规定的结合方向(结合性)进行。例如,算术运算符的结合方向是例如,算术运算符的结合方向是“自左至右自左至右”,即:在执行,即:在执行“a b+c”时,先执行时,先执行“a-b”;然后再执行加;然后再执行加c的运算。的运算。C语言程序设计教程2022/12/
29、2023 二二、算术运算符和算术表达式算术运算符和算术表达式 1.1.五种基本算术运算符五种基本算术运算符 +、-(减法(减法/取负)、取负)、*、/、%(求余数)(求余数)(1 1)关于除法运算符)关于除法运算符/C C语言规定:两个整数相除,其商为整数,小数部分被舍语言规定:两个整数相除,其商为整数,小数部分被舍弃。例如,弃。例如,5/2=25/2=2。但但5.0/2=2.55.0/2=2.5;(2 2)关于求余数运算符)关于求余数运算符 要求两侧的操作数均为整型数据,否则出错。要求两侧的操作数均为整型数据,否则出错。例如例如:5%35%3的值为的值为2 2;-5%3-5%3的值为的值为-
30、2-2;5%(-3)5%(-3)的值为的值为2 2;-5%(-3)-5%(-3)的值为的值为-2-2;12.3%3 12.3%3 第2章 C语言的基本数据类型与表达式C语言程序设计教程2022/12/20242 2、自增自增(+)(+)与自减与自减(-)(-)运算符运算符:自增运算使单个变量的值增,自增运算使单个变量的值增,自减运算使单个变量的值减自减运算使单个变量的值减1,结合性:自右至左。结合性:自右至左。用法与运算规则用法与运算规则(1)前置运算)前置运算:运算符放在变量之前:运算符放在变量之前:+i,-i+i,-i。先使变量的值增(或减),然后再以变化后的值参与先使变量的值增(或减),
31、然后再以变化后的值参与其它运算,即先增减、后运算。其它运算,即先增减、后运算。(2)后置运算)后置运算运算符放在变量之后:运算符放在变量之后:i+,i-i+,i-。变量先参与其它运算,然后再使变量的值增(或减),变量先参与其它运算,然后再使变量的值增(或减),即先运算、后增减。即先运算、后增减。例如:例如:等价于等价于 i=i+1;i=i+1;j=i;i+;j=i;i+;所以所以i i的值为的值为4 4,j j的值为的值为3 3。i+;j=i;i+;j=i;所以所以i i的值为的值为4 4,j j的值为的值为4 4。(1)i+;+i;(1)i+;+i;(2)i=3;j=i+;(2)i=3;j=
32、i+;(3)i=3;j=+i;(3)i=3;j=+i;第2章 C语言的基本数据类型与表达式3、算术表达式算术表达式C语言程序设计教程2022/12/2025 1 1、赋值运算符赋值运算符 赋值符号赋值符号“=”=”就是赋值运算符,它的作用是将一个表达式的就是赋值运算符,它的作用是将一个表达式的值赋给一个变量。值赋给一个变量。赋值运算符的一般形式为:赋值运算符的一般形式为:变量变量 =表达式表达式 优先级:只比逗号运算符高;优先级:只比逗号运算符高;结合性:自右至左;结合性:自右至左;例如例如:(1)x=(y=12)/4 y(1)x=(y=12)/4 y值为值为1212,x x值为值为3 3,表
33、达式的值为,表达式的值为3 3 (2)x=y=12/4 (2)x=y=12/4 y y值为值为3 3,x x值为值为3 3,表达式的值为,表达式的值为3 3 (3)x=(y=12/4)(3)x=(y=12/4)y y值为值为3 3,x x值为值为3 3,表达式的值为,表达式的值为3 3 (4)(x=y)=12/4 (4)(x=y)=12/4 如果表达式值的类型,与被赋值变量的类型不一致,但如果表达式值的类型,与被赋值变量的类型不一致,但都是数值型或字符型时,系统自动地将表达式的值转换成被都是数值型或字符型时,系统自动地将表达式的值转换成被赋值变量的数据类型,然后再赋值给变量。赋值变量的数据类型
34、,然后再赋值给变量。第2章 C语言的基本数据类型与表达式三、赋值运算符和赋值表达式C语言程序设计教程2022/12/20262.2.复合赋值运算符复合赋值运算符 复合赋值运算符是由赋值运算符之前再加一个双目运算复合赋值运算符是由赋值运算符之前再加一个双目运算符构成的。符构成的。复合赋值运算的一般格式为:复合赋值运算的一般格式为:表达式表达式1 1 op=op=表达式表达式2 2 它它等价于等价于:表达式表达式1 1=表达式表达式1 1 opop (表达式(表达式2 2)当表达式为简单表达式时,表达式外的一对圆括号才可当表达式为简单表达式时,表达式外的一对圆括号才可 缺省,否则可能出错。缺省,否
35、则可能出错。例如,例如,x+=3 x+=3 /*等价于等价于x=x+3 x=x+3*/y y*=x+6=x+6/*等价于等价于y=yy=y*(x+6)(x+6),而不是,而不是y=yy=y*x+6 x+6*/设设a=12a=12,计算表达式,计算表达式a+=a-=aa+=a-=a*1212和和a+=a-=aa+=a-=a*=12=12的值的值 C C语言规定的语言规定的5 5种复合算术赋值运算符如下:种复合算术赋值运算符如下:+=+=,-=-=,*=,/=/=,%=%=;/*复合算术赋值运算符(复合算术赋值运算符(5 5个)个)*/C语言程序设计教程2022/12/20273.3.赋值表达式赋
36、值表达式 由赋值运算符或复合赋值运算符,将一个变量和一个由赋值运算符或复合赋值运算符,将一个变量和一个表达式连接起来的表达式,称为赋值表达式。表达式连接起来的表达式,称为赋值表达式。(1 1)一般格式)一般格式 变量变量 (复合)赋值运算符(复合)赋值运算符 表达式表达式(2 2)赋值表达式的值)赋值表达式的值任何一个表达式都有一个值,赋值表达式也不例外。任何一个表达式都有一个值,赋值表达式也不例外。被被赋值变量的值,就是赋值表达式的值赋值变量的值,就是赋值表达式的值。例如,例如,“a=5”a=5”这个赋值表达式,变量这个赋值表达式,变量a a的值的值“”就就是它的值。是它的值。注意注意:复合
37、运算符是一个运算符复合运算符是一个运算符,但功能上但功能上,是两个运算是两个运算符功能的组合。符功能的组合。C语言程序设计教程2022/12/2028 1 1、逗号运算符:逗号运算符:,形式形式:逗号表达式逗号表达式1 1,逗号表达式,逗号表达式2 2,逗号表达式,逗号表达式n n 求解过程:自左至右,依次计算各表达式的值,求解过程:自左至右,依次计算各表达式的值,“表达式表达式n”n”的值即为整个逗号表达式的值。的值即为整个逗号表达式的值。例如,逗号表达式例如,逗号表达式“(a=3(a=3*5,a 5,a*4),a+5”4),a+5”的值的值=20=20:先求解:先求解a=3 a=3*5 5
38、,得,得a=15a=15;再求;再求a a*4=60 4=60;最后求;最后求解解a+5=20a+5=20,所以逗号表达式的值,所以逗号表达式的值=20=20。优先级:优先级:最低;最低;结合性:自左至右;结合性:自左至右;表达式的值:最后一个表达式的值。表达式的值:最后一个表达式的值。注意注意:C C语言常用逗号作为分隔符语言常用逗号作为分隔符,例如例如:int int a=3,b=4,c=5;a=3,b=4,c=5;第2章 C语言的基本数据类型与表达式四、其它运算符C语言程序设计教程2022/12/2029 形式有两种:形式有两种:sizeof 变量名变量名 sizeof(类型名类型名)结
39、果为整型数。结果为整型数。int a int a;float xfloat x;sizeof a sizeofsizeof a sizeof x x sizeof(int)sizeof(float sizeof(int)sizeof(float)例如例如第2章 C语言的基本数据类型与表达式2 2、求求字节运算符:字节运算符:sizeof 作用:求得变量或某种数据类型所需的字节数。作用:求得变量或某种数据类型所需的字节数。C语言程序设计教程2022/12/2030 C C语言允许整型、实型、字符型数据进行混合运算。语言允许整型、实型、字符型数据进行混合运算。有有3 3种转换方式:自动转换、赋值转
40、换和强制转换。种转换方式:自动转换、赋值转换和强制转换。一、一、类型自动转换类型自动转换 如果一个运算符两侧的操作数的数据类型不同,则系统按如果一个运算符两侧的操作数的数据类型不同,则系统按“先转先转换、后运算换、后运算”的原则,首先将数据自动转换成同一类型,然后在同的原则,首先将数据自动转换成同一类型,然后在同一类型数据间进行运算。转换规则如图所示。一类型数据间进行运算。转换规则如图所示。注意:注意:箭头方向只表示数据类型由低向高转换,不要理解为箭头方向只表示数据类型由低向高转换,不要理解为intint型先转换成型先转换成unsignedunsigned型,再转换成型,再转换成longlon
41、g型,最后转换成型,最后转换成doubledouble型。型。第2章 C语言的基本数据类型与表达式2.4 2.4 数据类型转换数据类型转换 1 1)横向向左的箭头,表示必须)横向向左的箭头,表示必须的转换。的转换。charchar和和short short 型必须型必须转换成转换成 int int 型,型,floatfloat型必须型必须转换成转换成doubledouble型。型。2 2)纵向向上的箭头,表示不同)纵向向上的箭头,表示不同类型的转换方向。类型的转换方向。doublelongunsignedintfloatchar,short高高低低C语言程序设计教程2022/12/2031 i
42、nt x=2;float y=1.6;char c=A;int x=2;float y=1.6;char c=A;则:则:c+xc+x*y=c +x y=c +x *y y 65(int)+2(int)65(int)+2(int)*1.6(double)1.6(double)=68.2(double)=68.2(double)二、赋值转换赋值转换 在在赋值时将赋值符右边值的类型转换成与其左边变量类赋值时将赋值符右边值的类型转换成与其左边变量类型一致的类型。型一致的类型。有下列几种情况:有下列几种情况:(1)(1)实型实型 整型(字符型):去掉小数部分;整型(字符型):去掉小数部分;第2章 C语
43、言的基本数据类型与表达式例如例如C语言程序设计教程2022/12/2032(2)(2)整型(字符型)整型(字符型)实型:实型:补足有效位;补足有效位;(3)(3)对对charchar、intint、shortshort、longlong、unsignedunsigned型数据:型数据:赋值符左边的变量(赋值符左边的变量(b b位)位)赋值符右边数据(赋值符右边数据(a a位)位)若若 a=b a=b 原样照赋;原样照赋;ab ab 截断高截断高a-ba-b位,送低位,送低b b 位;位;有符号数据有符号数据 有符号变量:符号扩展;有符号变量:符号扩展;其他情况:高其他情况:高b-a b-a 位
44、全补位全补0 0。符号扩展:符号扩展:符号位为符号位为0 0,剩余的高位补,剩余的高位补0 0;符号位为符号位为1 1,剩余的高位补,剩余的高位补1 1。ababfloat f=23;23.00000 f(7位)位)double f=A;65.0000000000000 f(15位)位)第2章 C语言的基本数据类型与表达式C语言程序设计教程2022/12/2033 三、三、强制类型转换强制类型转换 数据类型强制转换的一般格式为:数据类型强制转换的一般格式为:(要转换成的数据类型要转换成的数据类型)(被转换的表达式被转换的表达式)(int)(x+y)/*将将x+y的结果转换成的结果转换成int型
45、型*/例如:例如:int a=2,b=5;float x=4.4;int a=2,b=5;float x=4.4;则有:则有:表达式表达式 结果结果 b/a 2b/a 2 (float)b/a 2.5 (float)b/a 2.5 (float)(b/a)2.0 (float)(b/a)2.0 (int)x%a+x 4.4 (int)x%a+x 4.4 (int)x%(a+x)(int)x%(a+x)强制转换类型得到的是一个所需类型的中间量,原表达式类型强制转换类型得到的是一个所需类型的中间量,原表达式类型并不发生变化。例如,并不发生变化。例如,(double)a 只是将变量只是将变量a的值转换成一个的值转换成一个double型的中间量,其数据类型并未转换成型的中间量,其数据类型并未转换成double型。型。第2章 C语言的基本数据类型与表达式