C++的运算符十分丰富,使得C++的运算十分灵活方便。例如把赋值号(=)也作为运算符处理,这样,a=b=c=4就是合法的表达式,这是与其他语言不同的。C++提供了以下运算符:

算术运算符

+(加)  -(减)  *(乘)  /(除)  %(整除求余)  ++(自加)  --(自减)

关系运算符

>(大于)  =(大于或等于)  <=(小于或等于)  !=(不等于)

逻辑运算符

&&(逻辑与)  ||(逻辑或)   !(逻辑非)

位运算符

<>(按位右移)  &(按位与)  |(按位或)   ^(按位异或)  ~(按位取反)

赋值运算符 (=及其扩展赋值运算符)

条件运算符 (?:)

逗号运算符 (,)

指针运算符 (*)

引用运算符和地址运算符 (&)

求字节数运算符(sizeof)

强制类型转换运算符( (类型) 或类型( ))

成员运算符 (.)

指向成员的运算符 (->)

下标运算符 ([ ])

其他 (如函数调用运算符())

基本的算术运算符

在本章中主要介绍算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,其他运算符将在以后各章中陆续介绍。

需要说明,两个整数相除的结果为整数,如5/3的结果值为1,舍去小数部分。但是,如果除数或被除数中有一个为负值,则舍入的方向是不固定的。例如,-5/3在有的C++系统上得到结果-1,有的C++系统则给出结果-2。多数编译系统采取“向零取整”的方法,即5/3的值等于1,-5/3的值等于-1,取整后向零靠拢。

如果参加+,  -,  *, / 运算的两个数中有一个数为float型数据,则运算的结果是double型,因为C++在运算时对所有float型数据都按double型数据处理。

算术表达式和运算符的优先级与结合性

用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C++语法规则的式子,称C++算术表达式。运算对象包括常量、变量、函数等。例如,下面是一个合法的C++算术表达式:

a*b/c-1.5+'a'

C++语言规定了运算符的优先级和结合性。在求解表达式时,先按运算符的优先级别高低次序执行,例如先乘除后加减。如有表达式a-b*c,b的左侧为减号,右侧为乘号,而乘号优先于减号,因此,相当于a-(b*c)。如果在一个运算对象两侧的运算符的优先级别相同,如a-b+c,则按规定的“结合方向”处理。

C++规定了各种运算符的结合方向(结合性),算术运算符的结合方向为“自左至右”,即先左后右,因此b先与减号结合,执行a-b的运算,再执行加c的运算。“自左至右的结合方向”又称“左结合性”,即运算对象先与左面的运算符结合。以后可以看到有些运算符的结合方向为“自右至左”,即右结合性(例如赋值运算符)。关于“结合性”的概念在其他一些高级语言中是没有的,是C和C++的特点之一,希望能弄清楚。

表达式中各类数值型数据间的混合运算

在表达式中常遇到不同类型数据之间进行运算,如:

10+'a'+1.5-8765.1234*'b'

在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则按图所示。

假设已指定i为整型变量,f为float变量,d为double型变量,e为long型,有下面表达式:

10+'a'+i*f-d/e

运算次序为:

进行10+'a'的运算,先将'a'转换成整数97,运算结果为107。

进行i*f的运算。先将i与f都转换成double型,运算结果为double型。

整数107与i*f的积相加。先将整数107转换成双精度数(小数点后加若干个0,即107.000…00),结果为double型。

将变量e转换成double型,d/e结果为double型。

将10+'a'+i*f的结果与d/e的商相减,结果为double型。

上述的类型转换是由系统自动进行的。

C++自增和自减运算符(--和++)在C和C++中,常在表达式中使用自增(++)和自减(--)运算符,他们的作用是使变量的值增1或减1,如:

++i(在使用i之前,先使i的值加1,如果i的原值为3,则执行j=++i后,j的值为4)

--i (在使用i之前,先使i的值减1,如果i的原值为3,则执行j=--i后,j的值为2)

i++ (在使用i之后,使i的值加1,如果i的原值为3,则执行j=i++后,j的值为3,然后i变为4)

i--(在使用i之后,使i的值减1,如果i的原值为3,则执行j=i--后,j的值为3,然后i变为2)

++i是先执行i=i+1后,再使用i的值;而i++是先使用i的值后,再执行i=i+1。

正确地使用++和--,可以使程序简洁?清晰?高效。请注意:

自增运算符(++)和自减运算符(--)只能用于变量,而不能用于常量或表达式。

++和--的结合方向是“自右至左”。

自增运算符(++)和自减运算符(--)使用十分灵活,但在很多情况下可能出现歧义性,产生“意想不到”的副作用。

自增(减)运算符在C++程序中是经常见到的,常用于循环语句中,使循环变量自动加1。也用于指针变量,使指针指向下一个地址。

C 语言 运算符怎么使用,详解C++编程中运算符的使用相关推荐

  1. C程序语言表达式运算顺序,详解C++编程中表达式的语义与计算顺序

    表达式根据其运算符的优先级和分组来计算. 计算顺序请看以下示例: // expre_pluslang__pluslang_Order_of_Evaluation.cpp // compile with ...

  2. java编程里的values怎么使用,详解Java编程中super关键字的用法

    这篇文章主要介绍了Java编程中this与super关键字的用法,包括从内存结构方面分析super的作用域,需要的朋友可以参考下 通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程 ...

  3. for循环嵌套,C语言for循环嵌套详解!编程使我快乐!

    虽说是多层,事实上 for 循环嵌套的层数也不能太多.通常为两个 for 循环的嵌套,超过两个的极少使用. 与单个 for 循环相比,多个 for 循环的嵌套在逻辑上更复杂一点,但并不难懂. 直接给大 ...

  4. c语言之 malloc函数详解 在堆中动态分配内存malloc和new的区别

    一.原型:extern void *malloc(unsigned int num_bytes); 头文件:#include <malloc.h> 或 #include <alloc ...

  5. c语言 头文件卫士详解,C/C++中的“头文件卫士”

    在Objective C中可以用#import来防止重复包含,但在C/C++中就不同了,只能用"头文件卫士"了. 下面的程序是有错误的: // global.h 文件 // #if ...

  6. java super关键字的作用_详解Java编程中super关键字的用法

    通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量.但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自 ...

  7. Java中throw re_详解Java编程中throw和throws子句的使用方法

    java throw:异常的抛出程序可以用throw语句抛出明确的异常.throw语句的通常形式如下: throw throwableinstance; 这里,throwableinstance一定是 ...

  8. java策略管理_详解Java编程中的策略模式

    策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 策略模式的结构 策略模式 ...

  9. java让线程空转_详解Java编程中对线程的中断处理

    1. 引言 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时--都需要通过一个线程去取消另一个线程正在执行的任务.Java没有提供一种安全直接的方法 ...

最新文章

  1. [Android] TableLayout
  2. tcp/ip客户端与服务器
  3. vs code python_用VScode配置Python开发环境
  4. (7)Python赋值机制
  5. Http协议--Get和Post区别
  6. python爬虫 django搜索修改更新数据_python应用:Django中更新多个对象数据与删除对象的方法...
  7. 终于等到了scilab 5.1.1
  8. Python安装第三方库临时使用国内源
  9. 如何在多个SQL Server上执行作业
  10. 【答辩问题】计算机专业本科毕业设计答辩自述
  11. kettle的hello world
  12. nginx+php fpm日志报错信息
  13. NetApp 数据存储解决方案:广泛的全闪存、混合闪存和对象存储系统产品组合
  14. SOF-SLAM论文阅读笔记
  15. 解決Ubuntu下搜狗输入法出现无法输入中文的问题
  16. 图像处理3D 人体模型
  17. key、keyCode 和 which
  18. python和易语言哪个容易胖_坐着长肉还是躺着长肉 哪个更容易胖
  19. 跨境电商物流模式全面解析 性价比高的物流怎么选
  20. 夕颜的python笔记001

热门文章

  1. JavaScript匿名函数与托付
  2. Android 性能优化提示
  3. libgdx游戏引擎开发笔记(十三)SuperJumper游戏例子的讲解(篇七)----各个物体的创建及其碰撞检测...
  4. 修改EIGRP 路径cost 值,以及分析和实现等价与非等价负载均衡
  5. 1030利用三层交换机实现VLAN间通信
  6. php 自定义打印模板下载,PHP – 创建自定义模板系统?
  7. sqlserver 字符串转化数值函数_Excel常见函数用法(TEXT函数)
  8. ansys 内聚力_内聚力 软件工程
  9. java treemap_Java TreeMap lastEntry()方法与示例
  10. python怎么变各种颜色_python – 如何淡化颜色