运算符&表达式&数据类型课程目标}了解C语言的特点}了解Linux下C编程基础}掌握C语言数据类型}掌握C语言运算符}掌握C语言表达式语言特点}世界上使用最广泛计算机语言}强大的功能和灵活性}可移植性}高效性的现状}Linux内核开发}基于Linux的嵌入式开发概述}Linux和C天生有不解之源,Linux的操作系统内核主要用C写的,另外Linux下的很多软件也是用C写的,特别一些著名的服务器软件MySQL,Apache等。}gcc(GNUCCompiler)是GNU推出的功能强大,性能优越的多平台编译器,gcc编译器能将C,C++语言源程序编译连接成可执行文件,以下是gcc支持编译的一些源文件的后缀及其解释:}.cc语言源代码}.h程序所包含的头文件}.i已经预处理过的C源代码文件-E}.s汇编语言源代码文件-S}.o编译后的目标文件-c格式}gcc–ohellohello.c}-o输出可执行文件}-c只要求编译器输出目标代码(.o文件),而不必输出可执行文件}-g用于调试}./hello查看输出结果}用于Makefile实战}例子}用vi写一个1+2+3+….+10的程序}用gcc编译这个程序调试}利用__FILE__,__LINE__,__FUNCTION__实现代码跟踪调试#includestdio.hintmain(intargc,char**argv){printf(%s,%s,%d\n,__FILE__,__FUNCTION__,__LINE__);return0;}基本数据类型}逻辑类型。只有两个量true和false,表示逻辑真值和逻辑假值。}整数类型。C支持四种整数类型:char,short,int和long,整数类型用于处理整数。}浮点类型。C支持两种浮点类型:float和double,浮点类型用于处理包含小数部分的数值。}void类型。该类型也叫缺省型,用于描述值为空集,主要用于说明不返回值的函数或指向任一类型的指针等。基本数据类型}例如,}if(0.5)}x=12;}else}x=18;}上面0.5是非零数值,逻辑值为真,所以x赋给的是12,而不是18。bool类型基本数据类型}使用char数据类型的变量需要特别注意,防止数据超出值域,思考下列几个语句:}charc1=129;//出错,数据越界(-127)}unsignedcharc2=-1;//出错,数据越界(255)char类型整型常量}常量是指在程序运行期间其数值不发生变化的数据。}整型常量通常简称为整数。}C语言的整数可以是十进制数、八进制数和十六进制数。例如,十进制的数值3356可以有下列三种不同的表示形式:}十进制数3356}八进制数06434}十六进制数0xd1c浮点常量}浮点常量又称为实数,一般含有小数部分。}在C语言中,实数只有十进制的实数,它又分为单精度实数和双精度实数,它们的表示方法基本相同。实数有两种表示方法,即一般形式和指数形式。}一般形式的实数基本形式如下:}}例如,3.5,-12.5,3.1415926指数常量}指数形式的实数一般是由尾数部分、字母e或E和指数部分组成。当一个实数的符号为正号时,可以省略不写,其表示的一般形式如下:}例如,1.176e+10表示1.176×1010}-3.5789e-8表示-3.5789×10-8}通常表示特别大或特别小的数字符常量}所谓字符常量是指一个单一字符,其表示形式是由两个单引号包括的一个字符。}例如,‘A’,‘a’,‘Q’,‘0’,‘9’,‘+’,‘:’,‘?’,‘$’都是字符常量。}在C语言中,字符常量具有数值。字符常量的值就是该字符的ASCII码值。}因此,可以这样说字符常量实际上是一字节的正整数。字符常量}例如,chara,b,u,v;//说明a、b、u和v为字符变量a='F';//将70送给ab='A'+2;//b存放的是'C'字符u=''+'B';//u存放的是'b'字符v='b'-32;//v存放的是'B'字符}它们分别相当于下列运算;a=70;b=65+2;u=32+66;v=97-32;字符串常量}所谓字符串常量是指用双引号括起来的一串字符来表示的数据。下面给出几个字符串常量的例子:}Hello!,StudentS,9,“LINUX,李四}“北京海淀成府路***号,姓名:,“****@163.com,标识常量}所谓标识常量是指用标识符代替常量使用的一种常量,其名称通常是一个标识符。}标识常量也叫符号常量,为了不与一般变量的名称相混淆,标识常量的名称一般使用大写英文字母的标识符。标识常量在使用之前必须预先定义。}标识常量的一般说明形式为:#define#define标识常量名称标识常量名称常量常量标识常量}例如#defineMAX50#definePI3.1415926#defineNULL0#defineEOF-1#defineERROR-1}其中,MAX、PI、NULL、EOF和ERROR都是标识常量,它们代替的常量分别是50、3.1415926、0、-1和-1。这里,每个标识常量说明式子只能给出一个标识常量,并且占据一个书写行。标识常量标识常量}定义一个宏名字之后,可以在其他宏定义中使用,例如:#defineONE1#defineTWOONE+ONE#defineTHREEONE+TWO}如果一个串长于一行,可在行尾用反斜线”\”续行,如下:#defineLONG_STRING“Thisisaveryverylong\Stringthatisusedasanexample”案例}一个水分子的质量约为3.0*10-23g,1夸脱水大约有950g,编写一个程序,要求输入水的夸脱数,然后显示这么多水中包含说少水分子。}参看water.c变量}C语言的变量在程序中用变量名表示。变量名由用户根据其用途任意命名,变量名命名遵从标识符的起名规则(只能由字母\数字\下划线组成且头一个字母只能是字母或下划线.变量不能是C的特殊字符)。}在程序运行时,变量占据一定大小的存储空间,其大小由其数据类型来决定的,作为某变量的内存空间的首地址,称为变量的地址。变量变量在程序中使用时,必须预先说明它们的存储类型和数据类型。}变量说明的一般形式是:存储类型数据类型变量名;}存储类型可以是关键词auto、register、static和extern之一;}数据类型可以是前面讲的基本数据类型,也可以是后面要讲解的自定义的数据类型.}变量名是一个合法的标识符,其前面的32字符有效。注意:在上面变量说明的式子里,变量名之后有一个分号“;”意味着它是一个语句,该语句我们通常称为变量的说明语句变量}C语言支持四种存储类型:auto,register,static和extern。}用auto存储类型说明的变量都是局部于某个程序范围内的,只能在某个程序范围内使用,通常在函数体内或函数中的复合语句里。}C语言中,在函数体的某程序段内说明auto存储类型的变量时可以省略关键字auto。}例如,在函数体中,下列三条语句说明了三个auto存储类型的变量:}autointk;//说明一个auto整型的k变量}intj;//省略了auto,说明一个auto整型的j变量}doublex;//省略了auto,说明一个auto双精度型的变量变量}register称为寄存器型,使用register关键词说明的变量主要目的是想将所说明的变量放入CPU的寄存器存储空间中,这样可以加快程序的运行速度。}如申请不到就使用一般内存,同auto;}register存储类型说明变量的方式如以下例子所示:}registerintcount;}说明一个存储类型为register的整数变量;变量}extern称为外部参照引用型,使用extern说明的变量是想引用在其它文件中函数体外部说明的变量。当变量在一个文件中的函数体外说明,所有其他文件中的函数或程序段都可引用这个变量。一般用于在函数之间传递数据。变量}static称为静态存储类型,在C语言中,既可以在函数体内,也可在函数体外说明static存储类型的变量。在函数体内说明的static存储类型的变量也是一种局部变量,与auto最大不同点是:static存储类型的变量在内存中是以固定地址存放的,而不是以堆栈方式存放的;只要整个程序还在继续运行静态变量就不会随着说明它的程序段的结束而消失,它下次再调用该函数,该存储类型的变量不再重新说明,而且还保留上次调用存入的数值。变量的初始化和赋值}变量初始化的一般形式如下:存储类型数据类型变量=表达式;变量的初始化是指变量在被说明的同时赋给一个初值。例如,inti=0;staticdoublew=100.56,doubleresult=1;doublex=5,y=x*2;registerintcount=0;autodoubles=0;(void){………….return0;}Nandflash侦测externulongnand_probe(ulongphysadr);//smdk2410.cprintf(“%4luMB\n”,nand_probe((ulong)nand)20);//smdk2410.cunsignedlongnand_probe(unsignedlongphysadr){…..}//cmd_nand.c强制数据类型的转换}强制数据类型的转换是指采用某种方式将某种数据类型强制转换成指定的数据类型。这种转换存在两种方式:一种为显式的数据类型转换,另一种为隐式的数据类型转换。显式的数据类型转换实现的一般形式为:(数据类型名称)表达式例如,inta=22,b=0;floatc=24.87,d=3.3;b=(int)(a+c+d);//b存入右边表达式的计算结果为50强制数据类型的转换需要注意的是:}强制类型转换符后面的表达式如存在复杂运算,就一定要用小括号括起来}强制类型转换符是一种不安全的转换,一般都是将高级类型转换成低级类型,要丢失数据的精度;}强制类型转换并不改变表达式中变量的数据类型和其值。运算符及其运算}所谓表达式是指由运算符、运算量和标点符号组成的有效序列,其目的是用来说明一个计算过程。}表达式可以独立形成语句,该语句称为表达式语句。表达式语句的一般形式为:表达式;提供的算术运算符:+,-,*,/,%,++,--。}C语言的算术运算符如下:例如,inta=15,b=8,c;doublex=15,y=8,z;c=a+b;//c赋值为23c=a-b;//c赋值为7c=a*b;//c赋值为120c=a/