2011年春第五讲C51数据类型与运算符一、C51数据类型二、C51运算符及表达式三、C51程序设计中的常见问题分析四、实训2011年春一、C51数据类型1、char字符类型char类型的长度是一个字节,通常用于定义处理字符数据的变量或常量。分无符号字符类型unsignedchar和有符号字符类型signedchar,默认值为signedchar类型。Unsignedchar类型范围是0~255。Signedchar类型范围是-128~+127。2011年春一、C51数据类型2、int整型int整型长度为两个字节,用于存放一个双字节数据。分有符号int整型数signedint和无符号整型数unsignedint,默认值为signedint类型。Signedint表示的数值范围是-32768~+32767Unsignedint表示的数值范围是0~65535。3、long长整型long长整型长度为四个字节,用于存放一个四字节数据。分有符号long长整型signedlong和无符号长整型unsignedlong,默认值为signedlong类型。2011年春一、C51数据类型4、float浮点型单精度双精度5、指针型指针型本身就是一个变量,在这个变量中存放的指向另一个数据的地址。这个指针变量要占据一定的内存单元,对不同的处理器长度也不尽相同,在C51中它的长度一般为1~3个字节。6、sfr特殊功能寄存器sfr也是一种扩充数据类型,点用一个内存单元,值域为0~255。2011年春一、C51数据类型7、sfr1616位特殊功能寄存器sfr16占用两个内存单元,值域为0~65535。8、bit位标量bit位标量是C51编译器的一种扩充数据类型,利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是0就是1,类似一些高级语言中的Boolean类型中的True和False。9、sbit可位寻址sbit同位是C51中的一种扩充数据类型,利用它可以访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。2011年春一、C51数据类型2011年春二、C51运算符及表达式1、算术运算(1)算术运算符+-*/%(模运算或取余运算符)注意:都是双目运算符,即需要两个操作数对/,若两个整数相除,结果为整数(取整)对于%,要求%两侧的操作数均为整型数据,所得结果的符号与左侧操作数符号相同。++自增--自减注意:++和--是单目运算符++和--只能用于变量,不能用与常量和表达式。++j先自增在取值j++先取值后自增2011年春二、C51运算符及表达式(2)算术表达式用算术运算符和括号将操作数连接起来的式子。如:a*b/c-1+dInta=2,b=3,c=3,d=1;结果:2优先级:结合性:括号()2011年春二、C51运算符及表达式2、关系运算符和关系表达式(1)关系运算符优先级〈,〈=,〉,〉=,==,!=前四个优先级相同,后两个优先级相同,前四个优先级高于后两个。(2)关系表达式关系表达式的值为逻辑值,真和假,1代表真,0代表假。注:在优先级上算术运算符关系运算符赋值运算符2011年春二、C51运算符及表达式3、逻辑运算符和逻辑表达式(1)逻辑运算符及其优先级&&逻辑与||逻辑或!逻辑非注意:–1、&&与||是双目运算符,!是单目运算符2、在优先级上!〉&&〉||(2)逻辑表达式逻辑表达式值为逻辑量(真或假)2011年春二、C51运算符及表达式4、位运算符及其表达式按位与&按位或|按位异或^按位取反~左移右移(1)按位与运算符&如:chara=3,b=6作用:1)清零:让要清零的数与0按位与即可2)保留某些位,而将其余的位清零。00000011&00000110000000102011年春二、C51运算符及表达式(2)按位或运算符|作用:按位或的作用是将指定的位置置1(3)异或运算符^作用:1)与1异或,使其定位翻转。任何数与1异或都会变成相反数。2)与0异或,使指定位保留原值。任何数与0异或都保持不变。00000000|000011000000110000111100^00001111001100112011年春二、C51运算符及表达式(4)位取反运算符~如:unsignedchara=0x9a,b;b=~ab=0x65,a值不变。(5)位左移运算符左移1位相当与乘2如:unsignedchara=15a=a100001111a=a1左移1位a=30a=a2左移2位a=602011年春二、C51运算符及表达式(6)位右移运算(右移1位相当于除2)注:1、左移运算中高位移出舍弃不用,低位补02、右移运算中低位移出舍弃不用,高位对无符号数补0,对有符号数高位补符号位。5、赋值运算符和赋值表达式赋值运算符“=”优先级较底,右结合性。6、复合赋值运算符c51提供了下列十个复合赋值运算符。+=,-=,*=,/=,%=&=,1=,^==,=a+=ba=(a+b)a=4a=(a4)a&=ba=(a&b)2011年春三、C51程序设计中的常见问题分析1、运算符问题(1)“=”与“==”(2)“&&、||”与“&、|”(2)优先级2011年春三、C51程序设计中的常见问题分析2、循环问题(1)“死”循环while(1)for(;;)(2)循环条件for(i=7;i=0;i--){循环体;}for(i=0;i=7;i++){循环体;}2011年春三、C51程序设计中的常见问题分析3、显示数据处理整数和实型数据unsignedcharcodeseg_tab[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};uchard=128;ucharge,sh,ba;ge=d%10;sh=d/10%10;ba=d/100;P0=seg_tab[ge];P1=seg_tab[sh];P2=seg_tab[ba];2011年春三、C51程序设计中的常见问题分析4、输入状态的扫描常用于流程控制的条件P1=0xff;if(P1!=0xff)–{//operationg}2011年春四、实训流水灯要求1、不用库函数实现流水灯程序;2、在Proteus中演示;3、可增加按键功能。