C51的基本运算
1 C51的算术和赋值运算
1)算术运算符和算术表达式
C51语言一共支持5种算术运算符号。
运算符
意义
说明
+
加法运算或正值符号
 
减法运算或负值符号
 
*
乘法运算符号
 
/
除法运算符号,求整
5/2,结果为2
%
除法运算符号,求余
5%2,结果为1
C51语言中把用算术运算符和括号将运算对象连接起来的式子称为算术表达式,运算对象包括常量、变量、函数、数组和结构等。
    在算术表达式中需要遵守一定的运算优先级,规定先乘(余),后加减,括号优先级最高,同级别从左到右,规律和数学计算相同。
2)赋值运算符和赋值表达式
        赋值运算符包括普通赋值运算符和复合赋值运算符两种,普通的赋值运算符使用“=”,复合赋值运算符是在普通赋值运算符之前加上其他运算符所构成的赋值符。使用赋值运算符连接的变量和表达式构成赋值表达式。
赋值运算表达式举例:
a=3*z
a+=b    /*等同于a=a+b*
赋值运算涉及变量类型的转换,一般分为两种:
  一种是自动转换,一种是强制转换。
自动转换:不使用强制类型转化符,而是直接将赋值运算符号右边表达式或变量的值类型转化为左边的类型,一般是从低字节宽度高字节宽度转换。
类型
说明
浮点型和整型
浮点类型变量转化为整型时小数点部分被省略,只保留整数部分;反之只把整型修改为浮点型
单、双精度浮点型
单精度变量转化为双精度时在尾部添0,反之进行四舍五入的截断操作
字符型和整型
字符型变量转化为整型时,仅仅修改其类型;反之只保留整型的低八位
强制转换:使用强制类型转化符来将一种类型转化为另一种类型,强制类型转化符号和变量类型相同
强制类型转化举例
double(y)
            /*y转化为double类型*/
int(x)
z=unsigned char(x+y)   
          /*double类型数据yint类型数据x相加之后转化为unsigned char类型赋给z/*
1 逻辑运算
C51语言有3c语言中逗号运算符怎么运算种逻辑运算符。
①逻辑与:&&
②逻辑或:‖。
③逻辑非:!。
使用逻辑运算符将表达式或变量连接起来的表达式称为逻辑表达式,逻辑运算内部运算次序是先逻辑非后逻辑与和逻辑或,相同等级时从左到右,逻辑表达式的值为,在C5
1系统中使用“0”代表,使用0”代表逻辑,但是逻辑运算表达式结果只能使用“1”来表示
逻辑表达式。
a=3b=6,则
a=0                          /*a=3,为真,则!a为假0*/
a&&b=1
ab=1
3)关系运算
C51语言有6种关系运算,如下所示。
①小于:<。
②大于:>。
③小于等于:≤。
④大于等于:≥。
⑤如果等于:= =
⑥如果不等于:!=
关系运算符。
如果xyz的值分别为432,则
xy=1
y+zy=0
xyz=0           
                /*因为xy为真,则为11小于2,则表达式结果为0*/
4)位操作
单片机有位寻址空间,支持位变量操作,恰当的位操作会大大提高单片机程序的运行速度,还能极大地方便用户编程。
      位操作包括位逻辑运算和移位运算两种类型。
1)位逻辑运算
位逻辑运算包括位与、位或、位异或位取反。
①位与:关键字“&”,如果两位都为“1”,则结果为“1”,否则为“0”
②位或:关键字,如果两位其中有一个为“1”,则结果为“1”,否则为“0”
③位异或:关键字“^”,如果两位相等则为“0”,否则为“1”
④位取反:关键字,如果该位为“1”,则取反后为“0”,如果该位为“0”,则该位取反后为“1”
位逻辑操作实例。
如果x=0x54Hy=0x3BH,则:
x&y=01010100B&00111011B=00010000B=0x10H
xy=01010100B00111011B=01111111B=0x7FH
x^y=01010100B^00111011B=01101111B=0x6FH
x=01010100B=10101011B=0xABH
2)移位运算
移位运算包括左移位和右移位运算。
①左移位:关键字<<,将一个变量的各个位全部左移,空出来的位补0,被移出变量的位则舍弃不要。
②右移位:关键字>>,操作方式相同,移动方向向右。
移位运算举例
如果x=0xEAH=11101010B,则
X<<2=10101000B=0XA8H
x>>2=00111010B=0x3AH
4)自增自减运算、复合运算、逗号运算
      自增减运算、复合运算和逗号运算是C语言的特,C51语言继承了C语言的这种特
1)自增减运算
      自增减运算分别是使变量的值增加或减少1,相当于变量=变量+1”变量=变量-1”操作
自增减运算举例
如果unsigned char x=0x23H,则unsigned char y
y=x++    /*y=0x23x=0x24*/
y=++x    /*y=0x24x=0x24*/
y=x--    /*y=0x23x=0x22*/
y=--x    /*y=0x22x=0x22*/
可以看到,在程序中,x++是先赋值,后自加,++x是先自加,后赋值,自减运算和自加运算相同。
2)复合运算
      复合运算是将普通运算符和赋值符号结合起来的运算,有两个操作数的运算符都可以写成变量  运算符=变量的形式,相当于变量=变量  运算符  变量
复合运算举例。
x+=y                          /*相当于x=x+y*/
x>>=y                    /*相当于x=x>>y*/