运算(操作)是对数据的加工。最基本的运算形式常常可以用一些简洁的符号来记忆,这些符号称为运算符或操作符。被运算的对象-数据称为运算量或操作数。表达式描述了对哪些数据、以什么顺序以及施加什么样的操作。运算量可以是常量,也可以是变量,还可以是函数。

  C语言中提供了丰富的运算符,能够构成多种表达式,它把许多基本操作都作为运算符处理。例如,C语言把赋值符作为赋值运算符。

  学习运算符时应该注意以下几点:

  (1)运算符的功能。

  (2)运算符与运算量的关系。

  (3)运算符的优先级。

  (4)运算符的结合性。

  (5)运算的结果类型。

  2.3.1  算术运算

  1.双目算术运算符:+ 、- 、* 、/ 、%

  (1)功能:+、-、*、 /、 %的功能分别是加、减、乘、除、求模。

  (2)优先级:*、 /、 %同级别,+、- 同级别但低于 *、 /、 %。

  (3)结合性:左结合性。

  (4)结果类型:相同类型的数据的运算结果仍为相同类型,不同类型的数据的运算结果为类型较高的一种类型。

  (5)自反算术赋值运算符:+=、-=、*=、/=、%=

  (1)结合性:右结合性。

  (2)优先级:同赋值运算符的优先级。例如,b*=a+2等价于b=b*(a+2),而不等价于b=b*a+2。

  注意:C语言的简洁性提高了程序的效率,但也造成了阅读与理解程序的困难。我们建议有限制地使用自反算术运算符,或者只在不会造成误解的地方使用,或者用圆括号加以说明。

  2.自加和自减运算符:++、--

  (1)前缀形式:先增值后引用。例如,设变量x的值为2,则执行赋值表达式y=++x后变量x和y的值分别为3和3。

  (2)后缀形式:先引用后增值。例如,设变量x的值为2,则执行赋值表达式y=x++后变量x和y的值分别为3和2。

  (3)优先级:优先级比较高,高于双目或三目运算符。

  (4)结合性:右结合性。

  注意:自加自减运算符的运算对象只能是整型变量而不能是表达式或常量。例如,5++和(x+y)++都是错误的表达式。

  3.正负号运算符:+、-

  正负号运算符属于单目运算符,其优先级比较高,高于双目运算符的优先级,结合性为右结合性。

  2.3.2  关系运算、逻辑运算和条件运算

  1.关系运算符:>、<、>=、<=、!=、==

  (1)优先级:所有关系运算符的优先级都比算术运算符低而比赋值运算符高,前4种关系运算符的优先级比后2种关系运算符的优先级高。

  (2)结合性:左结合性。

  (3)关系表达式的值:关系表达式的结果为“真”时用1表示,用“假”时为0表示。例如,关系表达式0.2<0.5<1.0的值为0。

  注意:

  (1)字符数据的比较按其ASCII码值进行。

  (2)在判断两个浮点数是否相等时,由于存储器上的误差,会导致错误的结果。例如,关系表达式1.0/90*3*3*10==1.0的结果为0,而不是1。解决的方法是判断两者之差的绝对值小于某个小常数。

  2.符:!、&&、||

  (1)优先级:逻辑运算符“&&”和“||”的优先级比关系运算符低但比赋值运算符高,逻辑运算符“!”的优先级比所有的双目运算符高。逻辑运算符“&&”的优先级比运算符“||”的优先级高。

  (2)结合性:逻辑运算符“&&”和“||”是左结合性,单目运算符“!”是右结合性。

  (3)逻辑表达式的值:逻辑表达式的结果为“真”时用1表示,为“假”时为0表示。注意:C语言在进行逻辑运算时把非0作为“真”,把0作为“假”。

  注意:在C语言中,由逻辑运算“&&”和“||”组成的逻辑表达式,在特定的情况下会产生“短路”的现象。(1)在一个“&&”表达式中,若“&&”的一端为0,则不必再计算另一端,该表达式肯定为0。由于“&&”的结合性为左结合性,因此如果左端为0时,不再计算其右端。(2)在一个“||”表达式中,若“||”的一端为1,则不必再计算另一端,该表达式肯定为1。由于“||”的结合性为左结合性,因此如果左端为1时,不再计算其右端。

  3.件运算符:? :

  (1)条件运算符是C语言中唯一具有三个操作对象的运算符,它的功能是一种在两个表达式的值中选择一个的操作。它的语法格式为:

  e1?e2:e3

  它的操作过程为:先计算表达式e1的值,若e1为“真”(非0),则整个表达式的值为表达式e2的值,否则整个表达式的值为表达式e3的值。例如,表达式b>0?a+b:a-b表示求a+|b|的值;表达式max=a>b?a:b表示求a和b中最大的数。

  (2)优先级:比赋值运算符和逗号运算符高,但比所有的其它运算符低。

  (3)结合性:右结合性。

  注意:整个表达式的结果类型为e2与e3二者中类型较高的一种类型。例如,表达式y<3?-1.0:2的结果类型为实型。

C 运算符与表达式的更多相关文章

  1. Sql Server系列:运算符和表达式

    运算符的一些符号,他们能够用于执行算术运算.字符串连接.赋值以及在字段.常量和变量之间进行比较.在SQL Server 2012中,运算符主要由以下6大类:算术运算符.赋值运算符.比较运算符.逻辑运算 ...

  2. C Primer Plus_第5章_运算符、表达式和语句_编程练习

    Practice 1. 输入分钟输出对应的小时和分钟. #include #define MIN_PER_H 60 int main(void) { int mins, hours, minutes; ...

  3. javascript运算符与表达式

    表达式 表达式是关键字.运算符.变量以及文字的组合,用来生成字符串.数字或对象.一个表达式可以完成计算.处理字符.调用函数.或者验证数据等操作. 表达式的值是表达式运算的结果,常量表达式的值就是常量本 ...

  4. 【C语言学习】《C Primer Plus》第5章 运算符、表达式和语句

    学习总结 1.有了一定的语言基础,运算符和表达式这些都大同小异,无外乎赋值运算符(=).算术运算符(+.-.*./.%.++.——)和其他的一下运算符(sizeof.(type)). 2.声明一个参数 ...

  5. [.net 面向对象编程基础] (6) 基础中的基础——运算符和表达式

    [.net 面向对象编程基础] (6) 基础中的基础——运算符和表达式 说起C#运算符和表达式,小伙伴们肯定以为很简单,其实要用好表达式,不是一件容易的事.一个好的表达式可以让你做事半功倍的效果,比如 ...

  6. [Java 基础]运算符和表达式

    Java运算符 (1)赋值操作符 赋值操作符(=)表示:取右边的值(即右值),把它复制给左边(即左值). 右值可以是任意的常量.变量或表达式(只要可以生成一个值). 左值必须是一个明确的.已命名的变量 ...

  7. 不可或缺 Windows Native (3) - C 语言: 运算符,表达式,条件语句,循环语句,转向语句,空语句等

    [源码下载] 不可或缺 Windows Native (3) - C 语言: 运算符,表达式,条件语句,循环语句,转向语句,空语句等 作者:webabcd 介绍不可或缺 Windows Native  ...

  8. Python运算符与表达式

    Python运算符包括赋值运算符.算术运算符.关系运算符.逻辑运算符.位运算符.成员运算符和身份运算符. 表达式是将不同类型的数据(常亮.变量.函数)用运算符按照一定得规则连接起来的式子. 算术运算符 ...

  9. 01-Java基础知识:数据类型与变量、标识符、运算符、表达式

    Java基础知识:数据类型与变量.标识符.运算符.表达式 一.数据类型 Java定义了基本数据类型.引用数据类型.自定义类型. 八种基本数据类型:byte (1). short (2).  int ( ...

  10. Objective-C中的数据类型、常量、变量、运算符与表达式

    1.Objective-C中的数据类型: Objective-C中的基本数据类型有:int.char(-128-127).float.double.BOOL,Byte(0-255) Id类型相当于(等 ...

随机推荐

  1. cURL.1 手册页

    摘自http://blog.csdn.net/huangxy10/article/details/45717793 cURL.1 手册页 名称 cURL - transfer a URL 摘要 cUR ...

  2. OC基础6:多态、动态类型和动态绑定

    "OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.关于SEL类型的数据: (1).SEL ...

  3. Android自己主动化測试之Monkeyrunner用法及实例

    眼下android SDK里自带的现成的測试工具有monkey 和 monkeyrunner两个.大家别看这俩兄弟名字相像,但事实上是完全然全不同的两个工具,应用在不同的測试领域.总的来说,monke ...

  4. 源码推荐(7.17):不规则按钮类似于遥控器按钮,一个可以最大程度简化PageView与TabView切换的第三方框架

    不规则按钮,类似于遥控器按钮,可以单独控制按钮的上下左右(作者:masa_chu) 不规则按钮,类似于遥控器按钮,可以单独控制按钮的上下左右 测试环境:Xcode 6.2,iOS 6.0以上 Lazy ...

  5. JavaScript经典代码总结

    1. oncontextmenu="window.event.returnvalue=false" 将彻底屏蔽鼠标右键<table border oncontextmenu= ...

  6. Linux系统学习笔记:文件I/O

    Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...

  7. 表单提交中get与post的区别

    在Form里面,可以使用post也可以使用get.它们都是method的合法取值. 1. get是从服务器上获取数据,post是向服务器传送数据.   2. get是把参数数据队列加到提交表单的ACT ...

  8. div 居中CSS实现

    .login-box { position: absolute; border: solid #E3EAE7 1px; top: 50%; left: 50%; margin: -100px 0 0 ...

  9. PHP5中__call、__get、__set、__clone、__sleep、__wakeup的用法

    __construct(),__destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__w ...

  10. java--工具方法

    根据时间戳得到具体的时间: public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat(& ...