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

来源 :电脑知识与技术·学术交流 | 被引量 : 0次 | 上传用户:ares_sh
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要: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&&num<=31值为1、表达式num||num>31值为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.
其他文献
摘要:该文分析与研究了Apriori算法,指出其在实用中存在的主要问题。鉴于此,该文提出了一种改进的关联规则挖掘算法,使其可以有效地压缩数据规模,并给出了改进后的关联规则算法描述。最后将其应用于课程相关性分析,得到了有益于课程设置挖掘结果。实验结果表明了算法性能优良,提高了数据挖掘执行的效率。  关键词:数据挖掘;关联规则;Apriori算法  中图分类号:TP311文献标识码:A 文章编号:10
期刊
摘要:针对STATCOM的控制系统,引入了一种在全论域范围内带用变参数自调整因子的模糊PI控制策略。仿真结果表明:采用该方法所设计的控制系统可以有效地控制节点电压,改善接入点系统的稳定性,并且响应快,精度高,鲁棒性强。  关键词:静止同步补偿器;变参数;自调整;模糊PI控制  中图分类号:TP391文献标识码:A文章编号:1009-3044(2008)36-2728-03  Study on ST
期刊
摘要:通过阐述了基于CTI(计算机电话集成)技术呼叫中心的经典ACD(自动呼叫分配)排队Erlang-C模型,并分析了其实际应用中的缺陷,在此基础上提出了两种改进ACD算法:线性加权优先级排队算法、预测等待时间算法,这两种算法具有很大的灵活性,实用性及智能性!  关键词:CTI;ACD;Erlang-C模型;自动呼叫分配  中图分类号:TP911文献标识码:A文章编号:1009-3044(2008
期刊
摘要:Boosting 算法是近年来在机器学习领域中一种流行的用来提高学习精度的算法。文中以AdaBoost算法为例来介绍Boosting的基本原理。  关键词:机器学习;Boosting;泛化误差;分类  中图分类号:TP181文献标识码:A文章编号:1009-3044(2008)36-2698-02  A Study of Boosting Algorithm  LU Gang1, CHEN
期刊
摘要:结合计算机网络和嵌入式系统软件的发展现状,总结了嵌入式TCP/IP协议栈的一般特点和处理过程,进一步详细地讨论了协议栈中的拥塞控制机制,特别是TCP拥塞控制机制和IP拥塞控制机制的分类,以及它们的实现算法,做出了详细的分析和比较。明确地给出了当前嵌入式TCP/IP协议栈中的拥塞控制解决方法。  关键词:互联网;嵌入式系统;协议栈;数据;报文;拥塞  中图分类号:TP311 文献标志码:A 文
期刊
摘要:文章分析JMS和XML两种技术在实现异构数据库之间数据通信方面的优势;然后提出异构数据库集成的目标和主要问题,通过对数据库集成方案、数据的传输方式和传输格式、异构数据库访问等问题的分析,提出一种基于JMS和XML的异构数据库集成模型。  关键词:异构数据库集成;JMS;XML;OpenJMS  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)31-0789-03 
期刊
摘要:对等网络(P2P)有3种主要的组织结构:分布式哈希表(DHT)结构、树形结构、网状结构。P2P技术已经延伸到几乎所有的网络应用领域。该文以远程数据分发技术为例,从减少数据存储与传输成本、节约社会资源的角度出发,结合目前P2P技术的发展趋势,探讨并展望基于P2P技术的远程数据分发模式。  关键词:P2P技术;数据分发;数据传输;点对点  中图分类号:TP311文献标识码:A文章编号:1009-
期刊
摘要:面对目前互联网上动态多样的Web服务,如何发现最大符合用户请求的服务成为一个具有挑战性的课题。Web服务发现主要包括服务的匹配和服务的选择,虽然目前基于OWL-S和语义相似度的服务发现方法在一定程度上改进了传统的基于关键字和简单分类的服务发现机制,但也存在着在综合评价服务相似度时缺乏合理的权值分配的问题。因此,构建Web服务本体,利用神经网络合理分配各个相似度向量的权值,能够更好地发现与请求
期刊
摘要:本文主要介绍了一种Modbus/TCP工业以太网协议的规范和主要功能分类,在处理Modbus/TCP转换的时候可以参考。  关键词:工业以太网;Modbus/TCP协议  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)31-0855-02  The Achievement of the Modbus/TCP of Industrial Ethernet  HUO
期刊
摘要:以当前流行的开源软件和操作系统为基础,介绍了两种服务器端电子邮件服务的实现方式。涉及到服务器配置以及软件模块的编写。并分析了不同方式实现电子邮件服务的优劣。  关键词:电子邮件服务;Sun Solaris10;Perl;Sendmail   中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)31-0815-02  Implement Email Service on
期刊