运算符和表达式Word文件下载.docx
《运算符和表达式Word文件下载.docx》由会员分享,可在线阅读,更多相关《运算符和表达式Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
运算符按其表达式中与运算符的关系可分为单目运算符,双目运算符和三目运算符。
单目就是指需要有一个运算对象,双目就要求有两个运算对象,三目则要三个运算对象。
表达式则是由运算及运算对象所组成的具有特定含义的式子。
C是一种表达式语言,表达式后面加"
;
"
号就构成了一个表达式语句。
赋值运算符
对于"
="
这个符号大家不会陌生的,在C中它的功能是给变量赋值,称之为赋值运算符。
它的作用不用多说大家也明白,就是但数据赋给变量。
如,x=10;
由此可见利用赋值运算符将一个变量与一个表达式连接起来的式子为赋值表达式,在表达式后面加"
便构成了赋值语句。
使用"
的赋值语句格式如下:
变量=表达式;
示例如下
a=0xFF;
//将常数十六进制数FF赋于变量a
b=c=33;
//同时赋值给变量b,c
d=e;
//将变量e的值赋于变量d
f=a+b;
//将变量a+b的值赋于变量f
由上面的例子可以知道赋值语句的意义就是先计算出"
右边的表达式的值,然后将得到的值赋给左边的变量。
而且右边的表达式可以是一个赋值表达式。
在一些朋友的来信中会出现"
=="
与"
这两个符号混淆的错误原码,问为何编译报错,往往就是错在if(a=x)之类的语句中,错将"
用为"
。
符号是用来进行相等关系运算。
算术,增减量运算符
对于a+b,a/b这样的表达式大家都很熟悉,用在C语言中,+,/,就是算术运算符。
C51中的算术运算符有如下几个,其中只有取正值和取负值运算符是单目运算符,其它则都是双目运算符:
+ 加或取正值运算符
- 减或取负值运算符
* 乘运算符
/ 除运算符
% 取余运算符
算术表达式的形式:
表达式1 算术运算符 表达式2
如:
a+b*(10-a),(x+9)/(y-a)
除法运算符和一般的算术运算规则有所不同,如是两浮点数相除,其结果为浮点数,如10.0/20.0所得值为0.5,而两个整数相除时,所得值就是整数,如7/3,值为2。
像别的语言一样C的运算符与有优先级和结合性,同样可用用括号"
()"
来改变优先级。
这些和我们小时候学的数学几乎是一样的,我也不必过多的说明了。
:
( 还有这么多运算符呀!
暂时停一停吧,我们先来做一个实验吧。
学习运算符和另外一些知识时,我们还是给我们的实验板加个串行接口吧。
借助电脑转件直观的看单片机的输出结果,以后我还会用一些简单的实例讲解单片机和PC串口通讯的简单应用和编程。
如果你用的是成品实验板或仿真器,那你就可以跳过这一段了。
在制作电路前我们先来看看要用的MAX232,这里我们不去具体讨论它,只要知道它是TTL和RS232电平相互转换的芯片和基本的引脚接线功能就行了。
通常我会用两个小功率晶体管加少量的电路去替换MAX232,可以省一点,效果也不错(如有兴趣可以查看网站中的相关资料)。
下图就是MAX232的基本接线图。
图7-1 MAX232
在上两课的电路的基础上按图7-3加上MAX232就可以了。
这大热天的拿烙铁焊焊,还真的是热气迫人来呀:
P串口座用DB9的母头,这样就可以用买来的PC串口延长线进行和电脑相连接,也可以直接接到电脑com口上。
图7-2 DB9接头
图7-3 加上了MAX232的实验电路
做好后我们就先用回第一课的"
HelloWorld!
程序,用它来和你的电脑说声Hello!
把程序烧到芯片上,把串口连接好。
嘿嘿,这时要打开你的串口调试软件,没有就赶快到网上DOWN一个了。
你会用Windows的超级中端也行,不过我从不用它。
我用的comdebug,它是个不错的软件,我喜欢它是因为它功能好而且还有"
线路状态"
功能,这对我制作小玩意时很有用。
串口号,波特率调好,打开串口,单片机上电,就可以在接收区看到不断出现的"
HelloWorld!
一定要先打开软件的串口,再把单片机上电,否则可能因字符不对齐而看到乱码哦。
图7-4 调试结果
第七课运算符和表达式
(2)
关系运算符
对于关系运算符,同样我们也并不陌生。
C中有六种关系运算符,这些家伙同样是在小时候学算术时学习过的:
>大于
<小于
>=大于等于
<=小于等于
==等于
!
=等于
或者你是个非C程序员,那么对前四个一定是再熟悉不过的了。
而"
在VB或PASCAL等中是用"
"
!
则是用"
not"
由于工作关系我自己要使用好几种的程序语言,所以有时也会头晕搞错。
老了咯 :
P
小学时的数学课就教授过运算符是有优先级别的,计算机的语言也不过是人类语言的一种扩展,这里的运算符同样有着优先级别。
前四个具有相同的优先级,后两个也具有相同的优先级,但是前四个的优先级要高于后2个的。
当两个表达式用关系运算符连接起来时,这时就是关系表达式。
关系表达式通常是用来判别某个条件是否满足。
要注意的是用关系运算符的运算结果只有0和1两种,也就是逻辑的真与假,当指定的条件满足时结果为1,不满足时结果为0。
表达式1 关系运算符 表达式2
如:
I<J,I==J,(I=4)>
(J=3),J+I>
J
借助我们在上一课做好的电路和学习了的相关操作。
我们来做一个关系运算符相关的实例程序。
为了增加学习的趣味性和生动性,不妨我们来假设在做一个会做算术的机器人,当然真正会思考对话的机器,我想我是做不出来的了,这里的程序只是用来学习关系运算符的基本应用。
#include<
AT89X51.H>
stdio.h>
voidmain(void)
{
intx,y;
SCON=0x50;
//串口方式1,允许接收
TMOD=0x20;
//定时器1定时方式2
TH1=0xE8;
//11.0592MHz1200波特率
TL1=0xE8;
TI=1;
TR1=1;
//启动定时器
while
(1)
printf("
您好!
我叫Robot!
我是一个会做算术的机器人!
\n"
);
//显示
请您输入两个int,X和Y\n"
scanf("
%d%d"
&
x,&
y);
//输入
if(x<
y)
X<
Y\n"
//当X小于Y时
else//当X不小于Y时再作判断
if(x==y)
X=Y\n"
//当X等于Y时
else
X>
//当X大于Y时
}
要注意的是,在连接PC串口调试时。
发送数字时,发送完一个数字后还要发送一个回车符,以使scanf函数确认有数据输入。
Printf,scanf函数的具体用法,将和其它相关函数集中出现在的C51函数详解中,敬请大家留意。
逻辑运算符
关系运算符所能反映的是两个表达式之间的大小等于关系,那逻辑运算符则是用于求条件式的逻辑值,用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式了。
也许你会对为什?
quot;
逻辑运算符将关系表达式连接起来就是逻辑表达式了"
这一个描述有疑惑的地方。
其实之前说过"
要注意的是用关系运算符的运算结果只有0和1两种,也就是逻辑的真与假"
,换句话说也就是逻辑量,而逻辑运算符就用于对逻辑量运算的表达。
至于复杂的逻辑量的运算法则我也知之甚少,如要了解的朋友可以参看数字电路的教科书、逻辑学或数学书,而之里只能说说简单常用的几种。
逻辑表达式的一般形式为:
逻辑与:
条件式1&
&
条件式2
逻辑或:
条件式1||条件式2
逻辑非:
!
图7-5 演示结果
逻辑与,说白了就是当条件式1"
条件式2都为真时结果为真(非0值),否则为假(0值)。
也就是说运算会先对条件式1进行判断,如果为真(非0值),则继续对条件式2进行判断,当结果为真时,逻辑运算的结果为真(值为1),如果结果不为真时,逻辑运算的结果为假(0值)。
如果在判断条件式1时就不为真的话,就不用再判断条件式2了,而直接给出运算结果为假。
逻辑或,是指只要二个运算条件中有一个为真时,运算结果就为真,只有当条件式都不为真时,逻辑运算结果才为假。
逻辑非则是把逻辑运算结果值取反,也就是说如果两个条件式的运算值为真,进行逻辑非运算后则结果变为假,条件式运算值为假时最后逻辑结果为真。
同样逻辑运算符也有优先级别,!
(逻辑非)→&
(逻辑与)→||(逻辑或),逻辑非的优先值最高。
如有 !
True||False&
True
按逻辑运算的优先级别来分析则得到(True代表真,False代表假)
False||False&
True//!
Ture先运算得False
False||False//False&
True运算得False
False//最终False||False得False
下面我们来用程序语言去有表达,如下:
unsignedcharTrue=1;
//定义
unsignedcharFalse=0;