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以整型的方式输出,而在实践编程过程中无法将其值输出。