3.8 C51的运算符

运算符是表示特定的算术或逻辑操作的符号,也称为操作符。例如,“*”号表示了一个乘法运算符;“&&”号表示了一个逻辑与的运算符。在C51语言中,需要进行运算的各个量(常量或变量)通过运算符连接起来便构成了一个表达式。本节首先介绍运算符,表达式将在3.9节进行介绍。

C51语言中主要有算术运算符、关系运算符、逻辑运算符和位运算符这四类运算符,还有些用于辅助完成复杂功能的特殊运算符,如“,”运算符、“?”运算符、地址操作运算符、联合操作运算符、“sizeof”运算符、类型转换运算符等。使用特殊运算符可以起到简化程序的作用。下面对各种运算符的含义和用法分别进行介绍。

3.8.1 算术运算符

算术运算符是用来进行算术运算的操作符。C51语言中的算术运算符继承了其他高级计算机语言的特点,用法也基本一致。C51语言中的算术运算符有如下所示的几种。

❑“-”运算符:进行减法或取负的运算。

❑“+”运算符:进行加法运算。

❑“*”运算符:进行乘法运算。

❑“/”运算符:进行除法运算。

❑“%”运算符:进行模运算。

❑“—”运算符:进行自减(减1)运算。

❑“++”运算符:进行自增(增1)运算。

1.普通算术运算符

普通算术运算符是指加“+”、减“-”、乘“*”、除“/”以及模运算“%”,示例如下。


3+23=26;

17-5=12;

4*5=20;

6/3=2;

43%2=1;


这些普通算术运算符的运算操作和其他高级语言的运算相类似,需要注意的是以下几个运算符在操作中的不同之处。

❑除法运算符“/”的运算结果是取除法结果的整数部分。例如,“10/4=2”,结果取商2.5的整数部分,值为2。

❑取模运算符“%”的运算结果是取除法结果的余数部分。该运算符不能用于浮点型数据的运算操作。例如,“9%4=1”,结果取商9-4*2=1的余数部分,值为1。

❑减法运算符“-”除进行减法运算外,还可以用来进行取负运算操作。例如,“-sz”是取变量sz的负操作。

普通算术运算符的使用程序示例如下。


include<stdio.h>//头文件

void main()//主函数

{

int x,y,z;//定义整型变量

x=30;y=12;//赋初值

z=x+y;//加法运算

printf(“x+y=%d\n”,z);//输出结果

z=x-y;//减法运算

printf(“x-y=%d\n”,z);//输出结果

z=x*y;//乘法运算

printf(“x*y=%d\n”,z);//输出结果

z=x/y;//除法运算

printf(“x/y=%d\n”,z);//输出结果

z=x%y;//取模运算

printf(“x%%y=%d\n”,z);//输出结果

z=-x;//取负运算

printf(“-x=%d\n”,z);//输出结果

}


该程序可在KeilµVision3集成开发环境中运行,其执行结果如下。


x+y=42

x-y=18

x*y=360

x/y=2

x%y=6

-x=-30


2.自增和自减运算

自增运算符“++”表示操作数加1,即x++等同于x=x+1;自减运算符“—”表示操作数减1,即x—等同于x=x-1。这两个很常用的运算符是沿用了C语言的特点。

自增和自减运算符既可放在操作数之前,也可放在其后。例如x=x+1,可写成++x,也可以写成x++,但在表达式中这两种用法是有区别的。自增或自减运算符放在操作数之前时,C51语言在引用操作数之前就先执行加1或减1操作;运算符在操作数之后时,C51语言就先引用操作数的值,而后再进行加1或减1操作,示例如下。


x=++m;//m先增加1,然后赋值给x

x=m++;//m先赋值给x,然后再增加1


说明在大多数的编译环境中,采用自增和自减操作符所生成的程序代码比等价的赋值语句所生成的代码执行起来要快得多,因此推荐采用自增和自减运算符。

自增和自减运算符的程序示例如下。


include<stdio.h>//头文件

void main()//主函数

{

int x,y,z1,z2;//定义整型变量

x=10;y=21;//赋初值

z1=(x++)+(x++);

printf(“x=%d,z1=%d\n”,x,z1);//输出结果

z2=(++y)+(++y);

printf(“y=%d,z2=%d”,y,z2);//输出结果

}


这段程序可在KeilµVision3集成开发环境中运行,执行结果如下。


x=12,z1=23

y=23,z2=45


在该程序中,计算z1时,对于第一个括号先取x的值,然后x增1,此后x变为11;对于第二个括号同样先取x的值11,然后再增1,此后x变为12,因此最后x为12,z1为11+12=23。计算z2时,对于第一个括号y值,首先增1,然后取y的值,此后y变为22;对于第二个括号,同样y值先增1,然后取y的值,此后y变为23,因此最后y为23,z2为22+23=45。

说明在C51程序中,一般按照从左向右的运算顺序,关于运算符的运算优先级别的内容将在后面章节中作详细的介绍。