《单片机-第一章.优秀PPT.ppt》由会员分享,可在线阅读,更多相关《单片机-第一章.优秀PPT.ppt(49页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机接口技术(C51版)第一章 C51基本语法内容概述内容概述n数据类型和运算符、表达式数据类型和运算符、表达式是是是是C51语言程序设计的最基础学语言程序设计的最基础学问,问,C51语言把数据分成了多种数语言把数据分成了多种数据类型,并供应了丰富的运算对数据类型,并供应了丰富的运算对数据进行处理。本章对据进行处理。本章对C51语言的基语言的基本数据类型、常量变量、运算符及本数据类型、常量变量、运算符及表达式等进行具体介绍。表达式等进行具体介绍。教学目标教学目标1驾驭数据类型的概念,了解C51语言能够处理的数据类型。2驾驭常量的概念,驾驭各种类型常量的特点及表示形式。3驾驭变量的概念,了解i
2、nt、float、char型变量的特点,驾驭这三种类型变量的定义、赋值和运用方法。理解C51中变量的存储和编译模式的关系,驾驭单片机片内资源的访问方法。4了解C51语言的基本运算符及其特点,驾驭运算符的优先级和结合性的概念。5了解算术运算表达式、关系表达式及逻辑表达式的特点,娴熟进行表达式计算,能娴熟进行实际问题的表达式描述。6熟悉自增、自减运算的特点,驾驭赋值运算,了解逗号运算符和逗号表达式。7驾驭数据类型转换的概念,能进行基本的数据类型转换。11 C51基本数据类型n具有确定格式的数字或数值叫做数据,数据具有确定格式的数字或数值叫做数据,数据的不同格式叫作数据类型。任何程序设计都的不同格式
3、叫作数据类型。任何程序设计都离不开数据的处理。离不开数据的处理。nC5l的数据类型有位型的数据类型有位型(bit)、无符号字符、无符号字符(unsigned char)、有符号字符、有符号字符(signed char)、无符号整型、无符号整型(unsigned int)、有符、有符号整型号整型(signed int)、无符号长型、无符号长型(unsigned long)、有符号长型、有符号长型(signed long)、浮点、浮点(float)和指针类型等。其中和指针类型等。其中short与与long属整型数据、属整型数据、float与与 double型属浮点型数据。型属浮点型数据。数据数据类
4、类型型长长 度度值值 域域 范范 围围bit1 bit0,1sbit1 bit0,1unsigned char1 byte0255signed char1 byte-128127sfr1 byte0255unsigned int2 byte065536signed int2 byte-3276832767sfr162 byte065536*13 byte对对象的地址象的地址unsigned long4 byte04294967295signed long4 byte-21474836482147483647float4 byte+1.175494E-38+3.402823E+38n当程序中出现
5、表达式或变量赋值运算时,若当程序中出现表达式或变量赋值运算时,若运算对象的数据类型不一样,数据类型可以运算对象的数据类型不一样,数据类型可以自动进行转换,转换按以下优先级别自动进自动进行转换,转换按以下优先级别自动进行:行:nbit char int long floatnunsigned signed12 常量与变量121 常量在程序运行中其值不能变更的量称为常量。1整型常量。可以表示为十进制如123,0,-8等。十六进制则以0 x开头如0 x34。长整型就在数字后面加字母L,如10L,0 xF340L等。2浮点型常量。分为十进制和指数表示形式。十进制由数字和小数点组成,如0.888,334
6、5.345,0.0等,整数或小数部分为0时可以省略0但必需有小数点。指数表示形式为:数字.数字e数字 中的内容为可选项,其中内容依据具体状况可有可无,但其余部分必需有,如123e3,5e6,-1.0e-3。而e3,5e4.0则是非法的表示形式。3字符型常量是单引号内的字符,如a,d等。4字符串型常量由双引号内的字符组成,如 hello,english等。当引号内的没有字符时,为空字符串。n用标识符代表的常量称为符号常量。用标识符代表的常量称为符号常量。例如:在指令“#define PI 3.1415926”后,符号常量PI即代表圆周率3.1415926。1.2.2 变量1.2.2.1变量类型在
7、程序运行中,其值可以变更的量称为变量一个变量主要由两部分构成:一个是变量名,一个是变量值。每个变量都有一个变量名,在内存中占据确定的存储单元(地址),并在该内存单元中存放该变量的值。C51支持的变量通常有如下类型:位变量(bit)位变量的值可以是1(true)或0(false)。与805l硬件特性操作有关的位变量必需定位在8051CPU片内存储区(RAM)的可位寻址空间中。字符变量(char)字符变量的长度为l byte,即8位。C51编译器默认的字符型变量为无符号型(unsigned char)。负数在计算机中存储时一般用补码表示。整型变量(int)整型变量的长度为16位。8051系列CPU
8、将整型变量的msb存放在低地址字节。有符号整型变量(signed int)也运用msb位作为标记位,并运用二进制的补码表示数值。长整型变量(1ong int)长整型变量占用4个字节(byte),其它方面与整型变量(int)相像。浮点型变量(float)浮点型变量占4个字节(byte),很多困难的数学表达式都接受浮点变量数据类型。它用符号位表示数的符号,用阶码和尾数表示数的大小。用它们进行任何数学运算都须要运用由编译器确定的各种不同效率等级的库函数。(补充存储格式)n在编程时,为了书写便利,常常运用简化的在编程时,为了书写便利,常常运用简化的缩写形式来定义变量的数据类型。其方法是缩写形式来定义变
9、量的数据类型。其方法是在源程序开头运用在源程序开头运用#define语句。语句。n例如:例如:n#define uchar unsigned charn#define uint unsigned int 1.2.2.2变量的存储变量的存储器类型是指该变量在8051单片机硬件系统中所运用的存储区域,并在编译时精确的定位。8051系列单片机将程序存储器(ROM)和数据存储器(RAM)分开,并各有各自的寻址机构和寻址方式。8051系列单片机在物理上有四个存储空间:*片内程序存储器空间;*片外程序存储器空间,*片内数据存储器空间;*片外数据存储器空间KEIL uVision2所能支持的存储器类型所能支
10、持的存储器类型:存存储储器器类类型型说说 明明datadata直接直接访问访问内部数据存内部数据存储储器(器(128128字字节节),),访问访问速度最快速度最快bdatabdata可位可位寻寻址内部数据存址内部数据存储储器(器(1616字字节节),允),允许许位与字位与字节节混合混合访问访问idataidata间间接接访问访问内部数据存内部数据存储储器(器(256256字字节节),允),允许访问许访问全部全部256B256B地址地址pdatapdata分分页访问页访问外部数据存外部数据存储储器(器(256256字字节节),用),用MOVX RiMOVX Ri指令指令访问访问xdataxdat
11、a外部数据存外部数据存储储器器(64KB)(64KB),用,用MOVX DPTRMOVX DPTR指令指令访问访问codecode程序存程序存储储器(器(64KB64KB),用用MOVC A+DPTRMOVC A+DPTR指令指令访问访问n留意的是在留意的是在AT89C51芯片中芯片中RAM只有低只有低128位,位于位,位于80H到到FFH的高的高128位则在位则在52芯片中才有用,并和特殊寄存器地址重叠。芯片中才有用,并和特殊寄存器地址重叠。n定义变量时假如省略存储器类型,系统则会按编定义变量时假如省略存储器类型,系统则会按编译模式译模式SMALL、COMPACT或或LARGE所规定的默所规
12、定的默认存储器类型去指定变量的存储区域。无论什么认存储器类型去指定变量的存储区域。无论什么存储模式都可以声明变量在任何的存储模式都可以声明变量在任何的8051存储区范存储区范围,然而把最常用的变量、吩咐放在内部数据区围,然而把最常用的变量、吩咐放在内部数据区可以显著的提高系统性能。可以显著的提高系统性能。C51支持的主要编译模式 存存储储模式模式说说 明明SMALLSMALL 函数参数及局部函数参数及局部变变量放在片内量放在片内RAMRAM(默(默认变认变量量类类型型为为DATADATA,最大最大128128字字节节)。另外所有)。另外所有对对象包括象包括栈栈都都优优先放置于片内先放置于片内R
13、AMRAM,当片内当片内RAMRAM用用满满,再向片外,再向片外RAMRAM放置。放置。COMPACTCOMPACT 参数及局部参数及局部变变量放在片外量放在片外RAMRAM(默(默认认的存的存储类储类型是型是PDATAPDATA,最,最大大256256字字节节);通);通过过R0R0、R1R1间间接接寻寻址,址,栈栈位于位于80518051片内片内RAMRAM。LARGELARGE 参数及局部参数及局部变变量直接放入片外量直接放入片外RAM(RAM(默默认认的存的存储类储类型是型是XDATAXDATA,最大,最大64KB)64KB);使用数据指;使用数据指针针DPTRDPTR间间接接寻寻址。
14、因此址。因此访问访问效率效率较较低低且直接影响代且直接影响代码长码长度度1.2.3 8051片内资源及位变量1.2.3.1 特殊功能寄存器的C51定义8051单片机的内部高128个字节为专用寄存器区,其中51子系列有21个(52子系列有26个)特殊功能寄存器(SFR),它们离散的分布在这个区中,分别用于CPU并行口、串行口、中断系统、定时/计数器等功能单元及限制和状态寄存器。n对对SFR的操作,只能接受干脆寻址方式。为的操作,只能接受干脆寻址方式。为了能干脆访问这些特殊功能寄存器,了能干脆访问这些特殊功能寄存器,Keil C51扩充了两个关键字扩充了两个关键字“sfr”、“sfr16”,可以干
15、脆对,可以干脆对51单片机的特殊寄存器进行单片机的特殊寄存器进行定义,这种定义方法与标准定义,这种定义方法与标准C51语言不兼容,语言不兼容,只适用于对只适用于对8051系列单片机系列单片机C51编程。编程。定义方法如下:定义方法如下:sfr 特殊功能寄存器名特殊功能寄存器名=特殊功能寄存器地址常数特殊功能寄存器地址常数;sfr16 特殊功能寄存器名特殊功能寄存器名=特殊功能寄存器地址常特殊功能寄存器地址常数数;对于对于8051片内片内I/O口,定义方法如下:口,定义方法如下:sfr P1=0 x90;/定义定义P1口,地址口,地址90Hsfr P2=0 xA0;/定义定义P1口,地址口,地址
16、A0Hsfr后面是一个要定义的名字,要符合标识符的命名后面是一个要定义的名字,要符合标识符的命名规则,名字最好有确定的含义规则,名字最好有确定的含义 等号后面必需是常数,不允许有带运算符的表达式,等号后面必需是常数,不允许有带运算符的表达式,而且该常数必需在特殊功能寄存器的地址范围之而且该常数必需在特殊功能寄存器的地址范围之内(内(80H-FFH)。)。sfr是定义是定义8位的特殊功能寄存位的特殊功能寄存器,器,sfr16用来定义用来定义16位特殊功能寄存器,如位特殊功能寄存器,如8052的的T2定时器,可以定义为:定时器,可以定义为:nsfr16 T2=0 xCC;/这里定义8052定时器2
17、,地址为T2L=CCH,T2H=CDHn用sfr16定义16位特殊功能寄存器时,等号后面是它的低位地址,高位地址确定要位于物理低位地址之上。留意的是,sfr16不能用于定时器0和1的定义。n对于须要单独访问SFR中的位,C51的扩充关键字sbit可以访问位寻址对象。nsbit定义某些持殊位,并接受任何符号名定义某些持殊位,并接受任何符号名,“=”号后将确定地址赋给变量名号后将确定地址赋给变量名n这种地址安排,有三种方法:这种地址安排,有三种方法:n1)sbit 位变量名位地址位变量名位地址nsbit P1_1=Ox91;n这样是把位的确定地址赋给位变量。这样是把位的确定地址赋给位变量。n同同s
18、fr一样,一样,sbit的位地址必需位于的位地址必需位于80HFFH之之间。间。n2)Sbit 位变量名特殊功能寄存器名位位置位变量名特殊功能寄存器名位位置nsfr P3=0 xB0;nsbit P3_1=P3 1;/先定义一个特殊功能寄先定义一个特殊功能寄存器名,再指定位变量名所在的位置。存器名,再指定位变量名所在的位置。n当可寻址位位于特殊功能寄存器中时可接受这种当可寻址位位于特殊功能寄存器中时可接受这种方法。方法。n3)sbit 位变量名字节地址位变量名字节地址位位置位位置nsbit P3_1=0 xB0 1;1.2.3.2 位寻址区及位变量定义位寻址区及位变量定义C51供应一个供应一个
19、bdata的存储器类型,用于访问单片的存储器类型,用于访问单片机的可位寻址区的数据机的可位寻址区的数据 如如:unsigned char bdata age;/在位寻址区定义在位寻址区定义ucsigned char类型的变量类型的变量ageint bdata score2;/在可位寻址区定义数组在可位寻址区定义数组score2sbit flag=age7/用关键字用关键字sbit定义位变量来独定义位变量来独立访问可寻址位对象的其中一位立访问可寻址位对象的其中一位C51供应关键字供应关键字“bit”实现位变量的定义及访问。实现位变量的定义及访问。bit flag;/将将flag定义为位变量定义为
20、位变量bit valve_state;/将将valve_state定义为位定义为位变量变量通常通常C51编译器会将位变量安排在位寻址区的某一编译器会将位变量安排在位寻址区的某一位。位。定义位变量时应留意以下问题定义位变量时应留意以下问题1)位变量不能定义成一个指针,如不能定义:bit*POINTER。2)不能定义位数组,如不能定义:bit array2。3)bit与sbit的不同。bit不能指定位变量的确定地址,当须要指定位变量的确定地址(范围必需在0 x80-0 xff)时,须要运用sbit来定义。例:sbit flag=P10;n也可运用也可运用sbit访问可位寻址对象的位。访问可位寻址对
21、象的位。nbdata char jj;*jj定义为定义为bdata整型整型变量变量*nint bdata sum2;/*在可位寻址区定义在可位寻址区定义数组数组sum2,也称为可寻址位对象,也称为可寻址位对象*/nsbit mybit7=jj7;*mybit7 定义为定义为jj的第的第7位位*/nsbit score12=sum112;*score12定义为定义为sum1的第的第12位位*/n可位寻址对象也可以字节寻址。可位寻址对象也可以字节寻址。n例例:jj=0;*jj赋值为赋值为0*sbit定义要求基址定义要求基址对象的存储类型为对象的存储类型为bdata,否则只有确定的特殊,否则只有确定
22、的特殊位定义位定义(sbit)是合法的。位置是合法的。位置(操作符操作符)后的后的最大值依靠于指定的访问对象型,对于最大值依靠于指定的访问对象型,对于char、uchar而言是而言是0-7,对于,对于int、uint而言是而言是015。nsbit定义要求基址对象的存储类型为定义要求基址对象的存储类型为bdata,否则,否则只有确定的特殊位定义只有确定的特殊位定义(sbit)是合法的。位置是合法的。位置(操作符操作符)后的最大值依靠于指定的访问对象后的最大值依靠于指定的访问对象型,对于型,对于char、uchar而言是而言是0-7,对于,对于int、uint而言是而言是015。1.3 自定义变量
23、类型typedefn通常定义变量的数据类型时都是运用标准的通常定义变量的数据类型时都是运用标准的关键字,便利别人阅读程序。但运用关键字,便利别人阅读程序。但运用typedef可以有便利程序的移植和简化较长可以有便利程序的移植和简化较长的数据类型定义的数据类型定义 n例如例如:程序设计者对变量的定义习惯了程序设计者对变量的定义习惯了DELPHI的关键字,如整型数据习惯用关键的关键字,如整型数据习惯用关键字字integer来定义,在用来定义,在用C51时还想用时还想用integer的话,你可以这样写:的话,你可以这样写:ntypedef int integer;ninteger a,b;1.4 运
24、算符与表达式运算符与表达式1.4.1赋值运算利用赋值运算符将一个变量与一个表达式连接起来的式子为赋值表达式,在表达式后面加“;”便构成了赋值语句。运用=的赋值语句格式如下:变量=表达式;例如:a=0 x10;/将常数十六进制数10赋于变量ab=c=2;/同时将2赋值给变量b,cd=e;/将变量e的值赋于变量df=d-e;/将变量d-e的值赋于变量f赋值语句的意义就是先计算出=右边的表达式的值,然后将得到的值赋给左边的变量。而且右边的表达式可以是一个赋值表达式。1.4.2算术运算1.4.2.1 算术运算符及算术表达式nC51中的算术运算符有如下几个,其中只有取正中的算术运算符有如下几个,其中只有
25、取正值和取负值运算符是单目运算符,其它则都是双值和取负值运算符是单目运算符,其它则都是双目运算符:目运算符:1.十 (加法运算符,或正值符号)2.-(减法运算符,或负值符号)3.*(乘法运算符)4./(除法运算将)5.(模(求余)运算符。例如5%3结果是5除以3所得的余数2)n用算术运算符和括号将运算对象连接起来的用算术运算符和括号将运算对象连接起来的式子称为算术表达式。运算对象包括常量、式子称为算术表达式。运算对象包括常量、变量、函数、数组、结构体等等。变量、函数、数组、结构体等等。n算术表达式的形式:表达式1算术运算符表达式2例如:a+b,(x+4)/(y-b),y-sin(x)/21.4
26、.2.2 算术运算的优先级与结合性n算术运算符的优先级规定为:先乘除模,后加减,算术运算符的优先级规定为:先乘除模,后加减,括号最优先。乘、除、模运算符的优先级相同,括号最优先。乘、除、模运算符的优先级相同,并高于加减运算符。括号中的内容优先级最高。并高于加减运算符。括号中的内容优先级最高。n a+b*c;/乘号的优先级高于加号,故先乘号的优先级高于加号,故先运算运算b*c,所得的结果再与,所得的结果再与a相加相加n (a+b)*(c-d)-6;/括号的优先级最高,括号的优先级最高,*次之,减号优先级最低故先运算次之,减号优先级最低故先运算(a+b)和和(c-d),/然后将二者的结果相乘,最终
27、再与然后将二者的结果相乘,最终再与6相减相减n算术运算的结合性规定为自左至右方向,称为算术运算的结合性规定为自左至右方向,称为“左结合性左结合性”。即当一个运算对象两边的算术运算。即当一个运算对象两边的算术运算符优先级相同时,运算对象先与左面的运算符结符优先级相同时,运算对象先与左面的运算符结合。合。n a+b-c;/b两边是两边是“+”、“-”运算符优先级运算符优先级相同,按左结合性优先执行相同,按左结合性优先执行a+b再减再减C 1.4.2.3 数据类型转换运算n当运算符的两侧的数据类型不同时必需通过当运算符的两侧的数据类型不同时必需通过数据类型转换将数据转换成同种类型。数据类型转换将数据
28、转换成同种类型。转换的方式有两种:自动类型转换和强制类转换的方式有两种:自动类型转换和强制类型转换。型转换。自动类型转换n由C51编译器编译时自动进行。如图1-4-1所示为自动数据类型转换规则。charintlongfloatdoubleunsigned signed低 高图1-4-1数据类型转换规则强制类型转换n须要运用强制类型转换运算符,其格式为:n(类型名)(表达式);n例如:n(double)xx /将xx强制转换成double类型。n(int)(a+b)/将a+b的值强制转换成int类型。n运用强制转换类型运算符后,运算结果被强制转换成规定的类型。n例如:nunsigned char
29、 x,y;nunsigned char z;nz(unsigned char)(x*y);1.4.3关系运算1.4.3.1关系运算符1.(小于)2.(大于)3.(小于或等于)4.(大于或等于)5.(等于)6.!(不等于)n关系运算符同样有着优先级别。前四个具有相同的优先级,后两个也具有相同的优先级,但是前四个的优先级要高于后两个。n关系运算符的结合性为左结合。1.4.3.2 关系表达式关系表达式n关系表达式就是用关系运算符连接起来两个关系表达式就是用关系运算符连接起来两个表达式。表达式。n关系表达式通常是用来判别某个条件是否满关系表达式通常是用来判别某个条件是否满足。足。n要留意的是用关系运算
30、符的运算结果只有要留意的是用关系运算符的运算结果只有0和和1两种,也就是逻辑的真与假,当指定的两种,也就是逻辑的真与假,当指定的条件满足时结果为条件满足时结果为1,不满足时结果为,不满足时结果为0。n关系表达式结构如下:关系表达式结构如下:n表达式表达式1关系运算符表达式关系运算符表达式2例如:1.ab;/若a大于b,则表达式值为1(真)2.b+ca;/若a=3,b=4,c=5,则表达式值为0(假)3.(ab)c;/若a=3,b=2,c=1,则表达式值为1(真)。因为ab值为1,等于c值4.c5ab;/若a=3,b=2,c=1,则表达式值为0(假)。1.4.4逻辑运算关系运算符反映两个表达式之
31、间的大小等于关系,关系运算符反映两个表达式之间的大小等于关系,逻辑运算符则用于求条件式的逻辑值,用逻辑运逻辑运算符则用于求条件式的逻辑值,用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表算符将关系表达式或逻辑量连接起来就是逻辑表达式了。达式了。C51供应三种逻辑运算:供应三种逻辑运算:逻辑与逻辑与(&)逻辑或逻辑或(|)逻辑非逻辑非(!)逻辑表达式的一般形式为:逻辑表达式的一般形式为:逻辑与:条件式逻辑与:条件式1&条件式条件式2逻辑或:条件式逻辑或:条件式1|条件式条件式2逻辑非逻辑非:!条件式条件式n逻辑表达式的结合性为自左向右。逻辑表达逻辑表达式的结合性为自左向右。逻辑表达式的值应当是
32、一个逻辑值式的值应当是一个逻辑值“真真”或或“假假”,以以0代表假,以代表假,以1代表真。代表真。n逻辑表达式:用逻辑运算符将关系表达式或逻辑表达式:用逻辑运算符将关系表达式或逻辑量连接起来的式子称为逻辑表达式。逻辑量连接起来的式子称为逻辑表达式。n逻辑表达式的运算结果不是逻辑表达式的运算结果不是0就是就是1,不行,不行能是其它值。能是其它值。nC51逻辑运算符与算术运算符、关系运算符、赋值运算符之间优先级的次序如图1-3-2所示。!(非)算术运算符关系运算符&和|赋值运算符 高 低 优 先 级图1-3-2运算符的优先级1.4.5 位运算位运算C51语言干脆面对8051单片机,对于8051单片
33、机强大敏捷的位处理实力也供应了位操作指令。C51中共有6种位运算符:&按位与|按位或 按位异或 按位取反 位右移n位运算符的作用是按位对变量进行运算,但位运算符的作用是按位对变量进行运算,但是并不变更参与运算的变量的值。是并不变更参与运算的变量的值。n假如要求按位变更变量的值,则要利用相应假如要求按位变更变量的值,则要利用相应的赋值运算。的赋值运算。n应当留意的是位运算符不能对浮点型数据进应当留意的是位运算符不能对浮点型数据进行操作。行操作。n按位与、或、异或的真值表如表1-4-1所示。表1-4-1 与、或、异或位操作真值表XYX&Y X|YXY00000010111001111110n位运算
34、一般的表达形式如下:变量1 位运算符 变量2n位运算符也有优先级。从高到低依次是:|(按位或)(按位异或)&(按位与)(右移)=右移位赋值-=减法赋值&=逻辑与赋值*=乘法赋值|=逻辑或赋值/=除法赋值=逻辑异或赋值%=取模赋值=逻辑非赋值b)?a:b逗号运算符可以用它将两个或多个表达式连接起来,形可以用它将两个或多个表达式连接起来,形成逗号表达式。成逗号表达式。n逗号表达式的一般形式为:表达式表达式1,表达式,表达式2,表达式,表达式3表达式表达式nn这样用逗号运算符组成的表达式在程序运行时,这样用逗号运算符组成的表达式在程序运行时,是从左到右计算出各个表达式的值,而整个用逗是从左到右计算出
35、各个表达式的值,而整个用逗号运算符组成的表达式的值等于最右边表达式的号运算符组成的表达式的值等于最右边表达式的值,就是值,就是“表达式表达式n”的值。的值。n在实际的应用中,大部分状况下,运用逗号表达在实际的应用中,大部分状况下,运用逗号表达式的目的只是为了分别得到名个表达式的值,而式的目的只是为了分别得到名个表达式的值,而并不确定要得到和运用整个逗号表达式的值。并不确定要得到和运用整个逗号表达式的值。n并不是在程序的任何位置出现的逗号,都可以认并不是在程序的任何位置出现的逗号,都可以认为是逗号运算符。如函数中的参数,参数之间的为是逗号运算符。如函数中的参数,参数之间的逗号只是用来间隔之用而不是逗号运算符。逗号只是用来间隔之用而不是逗号运算符。