您的位置 首页 5G

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

44运算符及表达式前面三节实际是讲如何定义一个数据类型,所谓数据类型其实就是不同存储空间的形状,也就是不同单元格的组合方式。既然

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 运算符及表达式总结表

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/263588.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部