运算符是完成特定操作的符号。根据算子在表达式中与算子的关系,可将算子分为单目算子、双目算子和三目算子。单目算子是指只有一个操作数,双目算子需要两个操作数,三目算子需要三个操作数。
表达式是具有特定含义的公式,由运算和运算对象组成。根据运算符类型的不同,可以生成四种表达式,即算术表达式、赋值表达式、关系表达式和逻辑表达式。
赋值运算符与赋值表达式
简单赋值运算符和表达式,简单赋值运算符记为“=”。使用“=”的赋值语句的格式如下:
变量=表达式;
它的作用是将数据赋给变量,比如x = 10使用赋值运算符将变量与表达式连接起来的公式是赋值表达式,而“;”添加在表达式之后。它构成了一份转让声明。
例子如下:
a = 0xFF//将常量十六进制数FF赋给变量a。
b = c = 33//同时给变量B和C赋值。
d = e;//将变量E的值赋给变量d。
f = a+b;//将变量a+b的值赋给变量f。
从上面的例子我们可以知道,赋值语句的意思是先计算“=”右边表达式的值,然后把得到的值赋给左边的变量。右边的表达式可以是赋值表达式。
如果赋值运算符两边的数据类型不同,系统会自动进行类型转换,即将赋值号右边的类型改为左边的类型。具体规定如下:
(1)给实数类型一个整数类型,舍弃小数部分。
(2)整型赋给实型,值不变,但会以浮点形式存储,即加小数部分(小数部分的值为0)。
(3)字符类型给定一个整数。由于字符类型是一个字节,整数类型是两个字节,所以字符的ASCII码值放在整数的低八位,高八位是0。
(4)字符类型给整数,字符数量只给低八位。
指出
在原始代码中,经常会出现符号“= =”和“=”混淆的错误。当你问为什么会报错编译时,往往是在if(a=x)这样的语句中“=”用错了。符号“= =”用于等式关系的运算。
算术运算符与算术表达式
C51中的算术运算符如下:
+加减运算符
++自增运算符
-减法或负运算符
-自减算子
*乘法运算符
/除法运算符
%余数运算符
其中只有正负算子是单目算子,其他都是双目算子,除法算子不同于一般的算术运算规则。如果两个浮点数相除,结果是浮点数,比如10.0/20.0,两个整数相除时,值是整数,比如7/3,值是2。
算术表达式是由算术运算符和括号连接的表达式。算术表达式的形式如下:
表达式1算术运算符表达式2
如:a+b*(10-a),(x+9)/(y-a)
运算符and有优先级和组合,所以可以用括号“()”来改变优先级。
关系运算符与关系表达式
C51语言中有六种关系运算符:
& gt比…更大
& lt不到
& gt=大于或等于
& lt=小于或等于
= =等于
!=等于
关系运算符的优先级:前四个优先级相同,后两个优先级也相同,但前四个优先级高于后两个。
当两个表达式由关系运算符连接时,它是一个关系表达式。关系表达式通常用于判断条件是否满足。关系表达式的形式如下:
表达式1关系运算符表达式2
如:I(J=3),J+I & gt;j .
需要注意的是,关系运算符只有两种运算结果:0和1,即逻辑真和假。满足指定条件时,结果为1,不满足时,结果为0。
逻辑运算符与逻辑表达式
C51有三个逻辑运算符:
& amp& amp逻辑与
|||逻辑或
!逻辑非
逻辑表达式是通过用逻辑运算符连接关系表达式或逻辑量的逻辑表达式。逻辑表达式的一般形式是:
逻辑AND:条件1 &;& amp条件表达式2
逻辑OR:条件表达式1 ||条件表达式2
逻辑非:!条件表达式
逻辑与表达式的值:当条件表达式1和条件表达式2都为真时,结果为真(非零值),否则为假(零值)。也就是说,操作会先判断条件表达式1,如果为真(非零值),则继续判断条件表达式2。结果为真时,逻辑运算的结果为真(值1),不为真时,逻辑运算的结果为假(值0)。如果判断条件表达式1时不为真,则不需要判断条件表达式2,直接给出运算结果为假。
逻辑or表达式的值:只要两个运算条件中有一个为真,运算结果为真,只有当条件表达式都不为真时,逻辑运算结果为假。
逻辑非表达式的值:如果条件表达式的运算值为真,则逻辑非运算后结果变为假;当条件运算值为假时,最终的逻辑结果为真。
逻辑运算符的优先级从高到低是:!(逻辑否定)→&;& amp(逻辑与)→||(逻辑或)。
位运算符
按位运算符的作用是对变量进行按位运算,但它不会改变运算中涉及的变量的值。C51中有六个位运算符,如下所示:
& amp按位and
按位“或”
按位异或
~逐位反转
& lt& lt左移
& gt& gt右移
位操作的一般表达式如下:
变量1位运算符变量2
按位运算符的优先顺序是:“~”(按位反转)→”
示例:如果a=0x54,b=0x3b。
那么c = a &;b = 0x10
示例:如果a=0xea
那么a = a
复合赋值运算符
复合赋值运算符是在赋值运算符“=”之前添加其他运算符。C51中的复合赋值运算符如下:
+=加法赋值> & gt=右移位分配
-=减法赋值&;逻辑与赋值
* =乘法赋值| =逻辑或赋值
/=除法赋值=逻辑异或赋值
% =模分配
复合操作的一般形式是:
可变复合赋值运算符表达式
复合运算是指变量和表达式先执行运算符要求的运算,然后将运算结果赋给运算中涉及的变量,这是C语言中简化程序的一种方法。所有二元运算都可以用复合赋值运算符来简化。
例如:
A+=56相当于a=a+56。
Y/=x+9等价于y=y/(x+9)。
显然,使用复合赋值运算符会降低程序的可读性,但可以简化程序代码,提高编译效率。
逗号运算符
在之前的一些程序中,比如“int a,b,c”,用逗号来分隔表达式。但在C语言中,逗号是一个特殊的运算符,它可以将两个或多个表达式连接起来,形成一个逗号表达式。逗号表达式的一般形式是:
表达式1,表达式2,表达式3…表情
程序运行时,从左到右计算每个表达式的值,由逗号运算符组成的整个表达式的值等于最右边表达式的值,即“表达式n”的值。
例如
void main()
{
int a=2,b=4,c=6,x,y;
y=(x=a+b),(b+c);
printf(“y=%d,x=%d “,y,x);
}
程序中的分配关系如下:
a←2,b←4,c←6,x←0,y←0
x←a+b,y←b+c
在这个例子中,y等于整个逗号表达式的值,也就是表达式2的值,x是表达式1的值。
在实际应用中,大多数情况下,使用逗号表达式的目的只是为了获取单个表达式的值,并不一定要获取和使用整个逗号表达式的值。
应该注意,在程序中任何地方出现的逗号都不能被认为是逗号运算符。如函数中的参数,同类型变量定义中的逗号只用于间隔,不用于逗号运算符。
条件运算符
条件运算符“?”:”是一个三眼运算符,可以连接三个表达式,形成一个条件表达式。
条件表达式的一般形式如下:
逻辑表达?表达式1:表达式2
条件表达式中逻辑表达式的类型可以不同于表达式1和2。条件运算符的作用只是根据逻辑表达式的值来选择表达式的值。当逻辑表达式的值为真(非零值)时,整个表达式的值就是表达式1的值;当逻辑表达式的值为假(值为0)时,整个表达式的值就是表达式2的值。
让我们看一个例子:
如果a=1,b=2,我们需要的是取a和b中较小的值,放入min变量中。也许你会这样写:
如果(a
min = a;
其他
min = b;//当
使用条件运算符形成条件表达式,如下所示:
最小值= (a
很明显,它的结果和意义和上面的程序是一样的,只是代码比前面的程序少很多,编译效率比较高,但是和复合赋值表达式一样有一个缺点就是可读性比较差。在实际应用中可以加入适当的注释,有助于程序的调试和编写,方便以后的修改和阅读。
指针和地址运算符
C语言中专门用于指针和地址的两个运算符:
*获取内容
& amp记下地址
内容检索和地址检索的一般形式有:
变量= *指针变量
指针变量= &;目标变量
内容检索操作是将指针变量指向的目标变量的值赋给左边的变量;取地址操作是把目标变量的地址赋给左边的变量。
例如:
sizeof运算符
Sizeof是一个运算符,用于查找数据类型、变量或表达式的字节数。与“=”等只能在程序执行后计算结果的运算符不同,它直接在编译时产生结果。语法如下:
Sizeof(数据类型)
Sizeof(表达式)
例如,运行以下语句
printf(“char “)是多少字节?%bd bytes \n “,sizeof(char));
printf(“long “)是多少字节?%bd bytes \n “,sizeof(long));
结果如下:
char是多少字节?1字节
多少字节是长的?4字节
3.2.11强制类型转换运算符
C语言中的括号“()”也可以作为运算符,即cast运算符。它的功能是将表达式或变量的类型转换为指定的类型。
在C51程序中做算术运算时,需要注意数据类型转换,数据类型转换分为隐式转换和显式转换。隐式转换是编译器在编译程序时自动处理的,只有基本数据类型(即char、int、long和float)可以进行隐式转换。其他数据类型不能隐式转换。例如,我们不能通过隐式转换将整数赋给指针变量。在这种情况下,我们必须使用强制类型转换运算符进行显式转换。
cast运算符的常用形式是:
(类型)(表达式)
例如,预先在8051单片机的片外数据存储器(xdata)中定义一个字符指针变量px。如果要将初始值0xB000赋给这个指针变量,可以强制进行类型转换,如下所示:
px=(char xdata*) 0xB000
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。