解析C语言的运算符和表达式

时间:2022-05-05 05:22:21

解析C语言的运算符和表达式

摘要:C语言的运算符具有使用灵活的特点,可以用于解决许多其它编程语言难以处理的复杂问题。但在实际应用中,因对其理解不深,可能出现各种难以意料的结果。该文对运算符教学过程中使用容易出现问题的地方进行了分析,并给出提出了相应的解决方法。

关键词:C 语言;运算符;程序设计;逻辑表达式

中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)31-0900-02

Analysis of Operators and Expressions of C Language

DING Hui1,2

(1.Jiangsu University, Zhenjiang 212013, China; 2.Nanjing Forest Police College, Nanjing 210046, China)

Abstract: The high flexibility feature of operators of C language makes it useful to address some complex problems which other programming languages can not handle perfectly. However, erroneous understanding of operators often leads to some unexpected results. This paper discusses the problems easy to occur in the process of teaching are analyzed and gives corresponding solution methods to avoid above question.

Key words: C language; operator; programming; logical expression

1 引言

C 语言是高级程序设计语言中的一种, 随着计算机和互联网的普及, 它已成为大中专院校计算机专业和非计算机专业的必修科目, 但由于C 语言语法多、数据类型丰富等诸多问题, 学好、学精并非一件易事。在这些问题中, 其中之一就是关于运算符的使用, 该文将对C中的运算符从定义到使用作一介绍。

C语言的内部运算符很丰富,运算符是告诉编译程序执行特定算术或逻辑操作的符号。C语言有三大运算符:算术、关系与逻辑、位操作。另外,C还有一些非凡的运算符,用于完成一些非凡的任务。各种运算符的优先级如图1所示。

2 算术运算符与算术表达式

在C语言中,运算符“+”、“-”、“*”和“/”的用法与大多数计算机语言的相同,几乎可用于所有C语言内定义的数据类型。当“/”被用于整数或字符时,结果取整。例如,在整数除法中,10/3=3。一元减法的实际效果等于用-1乘单个操作数,即任何数值前放置减号将改变其符号。模运符“%”在C语言中也同它在其它语言中的用法相同。但是要注意,模运算取整数除法的余数,算所以“%”不能用于float和double类型。

2.1 算术运算符的优先级与结合性

C语言规定了运算符的优先级和结核性。在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。算术运算符的结合方向为“自左至右”,即先左后右,又称“左结合性”,即运算对象先与左边的运算符结合。

2.2 自增和自减

C语言中有两个很有用的运算符,通常在其它计算机语言中是找不到它们的――自增和自减运算符,++和--。运算符“++”是操作数加1,而“--”是操作数减1,换句话说:x=x+1;同++x;x=x-1;同-x;自增和自减运算符可用在操作数之前,也可放在其后,例如:x=x+1;可写成++x;或x++;但在表达式中这两种用法是有区别的。自增或自减运算符在操作数之前,C语言在引用操作数之前就先执行加1或减1操作;运算符在操作数之后,C语言就先引用操作数的值,而后再进行加1或减1操作。

请看下例: x=10;y=++x;此时,y=11。假如程序改为: x=10;y=x++;则y=10。在这两种情况下,x都被置为11,但区别在于设置的时刻,这种对自增和自减发生时刻的控制是非常有用的。在大多数C编译程序中,为自增和自减操作生成的程序代码比等价的赋值语句生成的代码要快得多,所以尽可能采用加1或减1运算符是一种好的选择。

2.3 强制类型转换运算符

可以利用强制类型转换运算符将一个表达式转换成所需类型。其一般形式为:(类型名)(表达式),注意,表达式应该用括号括起来。如果写成(int)x+y;则只将x转换成整型,然后与y相加。

有两种类型转换,一种是在运算时不必用户指定,系统自动进行的类型转换,如3+6.5,如果结果为float型,结果为9.5。第二种是强制类型转换,当自动类型转换不能实现目的时,可以用强制类型转换。如“%”运算符要求其两侧均为整型量,若x为float型,则“x%3”不合法,必须用“(int)x%3”。

3 关系和逻辑运算符

关系运算符中的“关系”二字指的是一个值与另一个值之间的关系,C语言的关系运算符有6个,如表1所示。用关系运算符把两个C语言表达式连接起来的式子称为关系表达式。其形式为:表达式1 关系运算符 表达式2;如x+1>y+z。关系表达式的结果只有两个:1或0。当关系表达式成立时,表达式的值为1;当关系表达式不成立时,表达式的值为0。

逻辑运算符中的“逻辑”二字指的是连接关系的方式。因为关系和逻辑运算符常在一起使用,所以将它们放在一起讨论。关系和逻辑运算符概念中的要害是True(真)和Flase(假)。C语言中,非0为True,0为Flase。使用关系或逻辑运算符的表达式对Flase和Ture分别返回值0或1(见表2)。

3.1 关系运算符与关系表达式

C语言提供6种关系运算符:=, ==,!=。用关系运算符将两个表达式(可以是算术表达式或关系表达式、逻辑表达式、复制表达式、字符表达式)连接起来的式子,称关系表达式。

3.2 逻辑运算符与逻辑表达式

用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。C语言提供3种逻辑运算符:&&逻辑与(相当于“并且”),||逻辑或(相当于“或者”),!逻辑非(相当于“否定”)。在判断一个数据的“真”或“假”时,却以0和非0为根据:如果为0,则判定为“逻辑假”;如果为非0,则判定为“逻辑真”。例如,假设num=12,则表达式!num值为0、表达式num>=1&&num31值为1。

4 条件运算符和条件表达式

条件运算符是C语言中唯一的三目运算符。由问号“?”和“:”两个字符组成,用户连接3个运算对象。用条件运算“?”和“:”组成的表达式称为条件表达式。其中运算对象可以是任何合法的算术、关系、逻辑、赋值或条件等各种类型的表达式。条件表达式的格式为:逻辑表达式1?表达式2:表达式3。运算规则:当表达式1为真时,整个表达式的值为表达式2的值;表达式1为假时,整个表达式的值为表达式3的值。例如:当a=3、b=2时,执行表达式后a>b?a:b,条件表达式的值为3。

5 赋值运算符和表达式

C语言的赋值符有:=、+=、-=、*=、/=、%=等。其中“=”是简单赋值运算符,其他是复合赋值运算符。简单赋值表达式的一般形式是:变量名=表达式,系统对该赋值表达式的处理过程是:先计算“=”右侧表达式的值,然后将其结果的数据类型转换为左侧变量的数据类型,最后将转换后的结果赋值给左侧变量。赋值表达式的值是左侧变量所得到的值。复合赋值运算符是由其他运算符和简单赋值运算符组合而成的。如表3。

6 逗号运算符和表达式

C语言的逗号运算符是“,”。在所有C语言运算符中其优先级最低。逗号表达式的一般形式为:表达式1,表达式2,表达式3,…,表达式n。在逗号表达式中,按照从左到右的顺序依次处理各表达式,而以最后一个表达式的值作为整个逗号表达式的结果值。

7 位操作符

与其它语言不同,C语言支持全部的位操作符(BitwiseOperators)。因为C语言的设计目的是取代汇编语言,所以它必须支持汇编语言所具有的运算能力。位操作是对字节或字中的位(bit)进行测试、置位或移位处理,这里字节或字是针对C标准中的char和int数据类型而言的。位操作不能用于float、double、longdouble、void或其它复杂类型。表4给出了位操作的操作符。位操作中的AND、OR和NOT(1的补码)的真值表与逻辑运算等价,唯一不同的是位操作是逐位进行运算的。

8 结束语

运算符与表达式是任何程序中使用频率最高的数据, 如何正确地理解和熟练地使用运算符和表达式一直都是初学者感到困难的一件事, 希望本文能对学习程序设计语言者起到指导作用。

参考文献:

[1] 马程,陈杰.慎用C语言中的运算符及表达式[J].科技信息,,2007(27):533-534.

[2] 谭浩强.C程序设计[M].3版.北京:清华大学出版社,2005.

[3] 崔武子.C语言程序设计实践教程[M].北京:清华大学出版社,2005.

[4] 何光明.C语言程序设计与应用开发[M].北京:清华大学出版社,2006.

[5] 邱力.C语言程序设计[M].北京:清华大学出版社,2004.

上一篇:运用EXCEL进行样本容量的估计 下一篇:一种改进的LSB音频信息隐藏算法