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

  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. poj 3026 (最小生成树)

    题意:起点开始有超过100个人,总共不会超过100个外星人,问把所有的外星人都搜出来花的最小时间.一条路径上的时间跟人数是无关的,只跟路径长度有关. 思路:刚开始人都在起点,当派一定人数去最近的外星人 ...

  2. 解决Mac OS Adobe Flash Builder 4.7 java heap space 问题【转】

    1. 在Finder中打开Adobe Flash Builder 4.7的安装目录 2. 在Adobe Flash Builder 4.7.app上点击右键“Show Package contents ...

  3. JavaScript事件处理程序 学习笔记

    我一直认为Javascript的特点就是在和用户交互的过程中可以进行一些操作,那么事件作为用户交互的主要部分就显得特别重要,今天先学习了JS事件处理程序的相关内容. 首先,要明白Javascript ...

  4. asp.net文件操作类

    /** 文件操作类 **/ #region 引用命名空间 using System; using System.Collections.Generic; using System.Text; usin ...

  5. js 记忆函数

    使用js记忆函数来计算菲波那切数列.阶乘等,可以极大减少我们必须要做的工作,加速程序计算. 1.编写记忆函数memoizer var memoizer = function(memo, fundame ...

  6. Java多线程并发编程之原子变量与非阻塞同步机制

    1.非阻塞算法 非阻塞算法属于并发算法,它们可以安全地派生它们的线程,不通过锁定派生,而是通过低级的原子性的硬件原生形式 -- 例如比较和交换.非阻塞算法的设计与实现极为困难,但是它们能够提供更好的吞 ...

  7. smarty之缓存笔记

    smarty缓存技术 在smarty中,缓存分为:普通缓存,单模版都缓存,局部缓存. 缓存:1:首选打开缓存配置项:$smarty->caching=true; 2:缓存生命周期的配置选项:$s ...

  8. 使用Python多线程犯的错误总结

    在使用Python多线程的时候,在使用多线程编程的时候,由于对于变量作用域和多线程不是很熟悉,导致在使用多线程的时候,犯了低级的错误. 第一个错误: 在多线程中使用全局变量,导致多个线程修改全局变量. ...

  9. LINQ 联合查询

    List<Attachment> imgList = (from a in ZQSDWEBEntities.Attachment                               ...

  10. linux配置jdk环境详解

    环境:Redhat Server 5.1(虚拟机) 工具:Xftp4  jdk-7-linux-i586.rpm文件 步骤1:把jdk-7-linux-i586.rpm文件拷贝到/usr/local目 ...