微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机之C语言-4.4运算符及表达式

51单片机之C语言-4.4运算符及表达式

时间:11-21 来源:互联网 点击:
4.4 运算符表达式

前面三节实际是讲如何定义一个数据类型,所谓数据类型其实就是不同存储空间的形状,也就是不同单元格的组合方式。既然定义了数据类型,我们的目的当然是如何使用它们,比如赋值,比较大小,移位变化,等待。简单的讲就是”谁”-数据类型, “怎么样”-如何运算。往我们定义的单元格中填充内容。既然要运算当然有配套的运算符和表达式,现在将各种运算符及表达式总结如表4-4-1所示。

这里我们选取几个在单片机编程中比较常见的运算符进行讲解。

(1) 自增运算和自减运算

对于运算符相信大家非常熟悉,这里不细讲。值得提醒一下的是,自增和自减运算符,

++a:a的值先增加1后,再参与其他运算

a++: a的值先参与其他运算,再使a的值增加1

--a: a的值先减小1后,再参与其他运算

a--: a的值先参与其他运算,再使a的值减小1

这里我们举一个例子:

a = 1;

b = 0;

a = ++b;

a = 1;

b = 0;

a = b++;

现在我们在VS2013中验证一下输出结果,

#include

void main(void)

{

int a, b;

a = 1;

b = 0;

b = a++;

printf("a=%d\nb=%d\n",a,b);//输出结果a=2,b=1

a = 1;

b = 0;

b = ++a;

printf("a=%d\nb=%d\n",a,b);//输出结果a=2,b=2

system("pause");

}

(2)赋值运算

赋值运算符很好理解,需要注意的是书写形式,比如

a = a + 1;

很多情况下我们看到的表达式是把运算符”+”放到”=”前面,然后把第二个a去掉

a += 1;

(3)关系运算符

在关系运算符中,在比较a与b是否相等的时候,使用a==b,这里容易漏掉一个等号

而a=b表示把b的值赋给a

(4)逻辑运算

参加逻辑运算的对象,用”0”表示假,用”非0”表示真.

逻辑运算的运算规则可见的归纳为:

逻辑与-同真为真,逻辑或同假为假,逻辑非遇假变真,遇真变假

(5)位运算

左移的规则是将二进制数向左移动若干位,左边移走的高位被丢弃,右边被空出来的低位补零。

右移的规则是将二进制数向右移若干位,右移与被移动的数据是否带符号有关。对于无符号整数来讲,左端空出的高位全部补0.

这里我们不讨论带符号的位移

例4-4-1 通过位移的方法创建流水灯

#include "reg52.h"

typedef unsigned char uchar;

void delayUs(uchar t);

void delayMs(uchar t);

void main(void)

{

uchar LED=0X80;//10000000

uchar i;

while(1)

{

for (i=0;i<8;i++)

{

P1= ~LED;//按位非

LED>>=1;

delayMs(100);

}

LED=0X80;

}

}

void delayUs(uchar t)

{

while(--t);

}

void delayMs(uchar t)

{

while(--t)

{

delayUs(245);

delayUs(245);

}

}

(6)逗号和条件运算符

逗号运算符是所有运算符中优先级最低的,运算的结果值是最后一个表达式的值。例如:

int a,b,c,d;

d=(a=1,b=a+2,c=b+3);

printf("d=%d\n",d)

那么以上输出的结果为6.在很多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的值,逗号表达式最常用与循环语句(for语句)中。

例如:

for(s=0,i=1;i<=100;s+=i,i++)

条件表达式的一般形式为:

表达式1 ?表达式2 :表达式3

条件表达式中含有三个操作对象,它们都是表达式。一般,表达式1是关系表达式或逻辑表达式,用于描述条件表达式中的条件,根据条件的真假判断是进行表达式2的运算还是进行表达式3的运算。表达式2和表达式3可以是常量,变量或表达式如算术表达式,关系表达式,赋值表达式和逻辑表达式等。

一般情况下,条件表达式与结构程序设计中的if语句可以进行相互替换。

例如:

max = (a>b) ? a : b

用if语句表示为:

if (a>b)

{

max=a;

}

else

{

max=b;

}

但不是所有的条件语句都能替换,比如

if (a>b)

{

printf("%d",a);

}

else

{

printf("%d",b);

}

这里不能使用以下语句替换,

a>b?printf("%d",a) : printf("%d",b);

为什么?因为条件表达式的结果是一个值,要将这个值赋给一个变量或以一个值的形式输出,而上面的形式表示的是,如果a>b为真,就将a以整型的形式输出,否则将b以整型的形式输出,而在实际编程过程中无法将其值输出。

表4-4-1 运算符及表达式总结表?


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top