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

  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. paip.oracle10g dmp文件导入总结

    paip.oracle10g dmp文件导入总结 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.net ...

  2. UVa 1583 Digit Generator(数学)

     题意 假设a加上a全部数位上的数等于b时 a称为b的generator  求给定数的最小generator 给的数n是小于100,000的  考虑到全部数位和最大的数99,999的数位和也才45 ...

  3. uva 10161 Ant on a Chessboard 蛇形矩阵 简单数学题

    题目给出如下表的一个矩阵: (红字表示行数或列数) 25 24 23 22 21 5 10 11 12 13 20 9 8 7 14 19 3 2 3 6 15 18 2 1 4 5 16 17 1 ...

  4. JavaScript中的setAttribute用法

    我们经常需要在JavaScript中给Element动态添加各种属性,这可以通过使用setAttribute()来实现,这就涉及到了浏览器的兼容性问题. setAttribute(string nam ...

  5. 第五章SignalR的实时高频通讯

    第五章SignalR的实时高频通讯 概述:本例子演示了如果创建一个对象与其他浏览器共享实时状态的应用程序.我们要创建的应用程序为“MoveShape”,该MoveShape页面会显示一个Html Di ...

  6. winform使用xml作为数据源

    1.新建窗体应用程序 2.拖放DataGridView 3.在bin\Debug中放入XML文件 using System; using System.Collections.Generic; usi ...

  7. css单位和值

    css需要单位来度量.内含整数.小数.百分数的情况,很多条件下支持正负的情况,当然是有限制的了.百分数基本是相对于自身.或是父或是祖先元素的某个属性值. 颜色         颜色的表示分为:命名颜色 ...

  8. zookeeper_00:zookeeper注意事项

    需要将应用数据和协同数据独立开. 比如:网络邮箱服务的用户对自己邮箱中的内容感兴趣,但是并不关心由哪台服务器来处理特定邮箱的请求.在这个例子中,邮箱内容就是应用数据,而从邮箱到某一台邮箱服务器之间的映 ...

  9. HDU 4415 - Assassin’s Creed

    Problem Description Ezio Auditore is a great master as an assassin. Now he has prowled in the enemie ...

  10. PendingIntent Bundle null解决方案

    在安卓开发中,用通知栏,如果点击通知栏条目,跳转Intent需要传值的时候会出现问题,传入值失败. Intent intent; PendingIntent sender=PendingIntent. ...