让我们来看一看C++ 三.表达式与运算符

所谓表达式,就是由数字、运算符号、约束变量等以能求得数值的有意义的排列方式形成的组合,我们平时说的算式,去掉得数和等号后就是一个表达式。

  变量、数字什么的,看过第二章的读者应该都懂了,我这里要讲的是运算符号。

  在我们日常生活中,运算符号不外乎+ - × ÷ 一类,在C++中,可以直接完成的运算有五种,分别是加法(+)、减法(-)、乘法(*)、整除(/)和去余(%)。

  首先乘法并不是用×来表示的,这是因为,那个符号在我们使用的各式各样的键盘配位中,都是一个很难打出的符号,而*只需要左手左移,右手上移,只是比你正常打字慢一点而已。但是除法被分成了两个,其实这是针对整型来讲的,对于浮点数,那么只有一个/了,因为我们在进行运算的时候,一般情况下,运算中用的数据类型要和结果的数据类型保持高度一致,为了避免除法出现小数,我们只能分成两部分。9 ÷ 2 = 4 ... 1,求4的过程就是整除的过程,求1的过程就是去余的过程,我想这很好理解。

  实际上,这种设计为我们提供了各种各样的好处,比如当我们需要让某些数字每打印4个换一次行的话,我们就可以利用求余运算了。

  还有一种东西叫做条件运算符,他也可以试着帮我们解决上一个问题。

  a = b / c ? 1 : 2;

  这句话的意思就是,如果b整除c的结果不为0,那么a就等于1,否则就等于2。为什么我们非要和零较劲那,这是因为计算机用二进制来储存东西,而二进制的每一位可以理解为一个开关,0就是关闭,表示否,1就是开启表示是,在程序里,我们把任何不为0的数字都认为是开启,也就是表示是,所以上一个条件表达式就可以理解为是

a = 判定条件 ? 如果成立,那么 : 如果不成立,那么

  我们可以把它写成

判定条件

    ? 如果成立,那么

    : 如果不成立,那么

  这样这个东西就明白多了。

 

  再介绍一下逻辑运算符, ! && || ^这四种逻辑运算符,分别代表着非、与、或,如果你之前没有接触过集合论的话,对这三个运算符的讲解可能会费上一番功夫,所以我不对他们进行详细讲解,我只是简单的讲一下逻辑电路(其实这样讲也很费事),用逻辑电路来讲着三种运算符。首先是非(!),

 

  我们把中间那个东西叫做门,他在这里所代表的就是非门,这个开关是一个神奇的开关,他可以把高电平(可以给用电器供电)变为低电平(不可以给用电器供电),也可以把低电平变为高电平,也就是说,对应到程序中,他会把true变为false,把false变为true。如果a是一个布尔变量,他等于true, !a=就等于 false。当然,不要被我前面的言论误导,a的值并没有变化,变的是表达式的值。他还可以用于数字,他会把一切不是0的数字都变成0,把0变成1;

  

  这个是与门,他类似于串联,必须两个都是高电平他才会输出高电平的点,其他情况都只会输出低电平的电。他像汉语的并且,在表达式中,如果与(&&)的两边均为true他就会返回true否则返回false。为了节省篇幅,我不再继续贴图,而是用这个图来讲剩下两个运算符。 或门像是并联,只要有一个是高电平他就会输出高电平,如果有两个高电平,那么他还是输出高电平,如果都是低电平,他就只能输出低电平。在表达式中,如果或(||)两边有一个或两个为true,他都会返回true,否则返回false。最后是异或门,他的要求很怪,他要求两个输入电流必须不同,也就是必须一个是高电平另一个是低电平,他才会输出高电平,否则只会输出低电平。在表达式中,如果异或(^)两边一个为true,另一个为false,他就返回true,否则返回false。

  && || ^都可以用于数字计算,但他们计算的结果不是仅限于0和1,他们会在2进制的基础上,对两个数字进行逐位的计算,这是1代表true,0代表false,他返回的就是计算后所得到的二进制对应的数字(通常是十进制)。

  还有一种东西,我们管它叫做复合赋值运算符,如果说我们要a等于a+b(b可以为变量,也可以为常量或者常数)的值,我们可以这样写

a = a + b; "在这里,有一个初学者可能无法理解的东西,就是为什么等号两端都有a,其实,我们在赋值前,要先求出后面表达式的值,然后再赋给a。所以后面表达式中的a相当于原来的a对       "应的数值,而前面的a,只是一个被赋值的变量,a = a + b 和 c = a + b本质上是一样的。"

  我们不妨把a换成aaaaaaaaaa,这时,等号两边都有aaaaaaaaaa,写起来很费劲呀,有没有。那我们怎么省去这部分工作那,我们可以这样写

a += b;

  同理,我们还有 -= *= /= %= 这一系列的运算符。

  接下来,我们懒到连b都不想写了,那怎么办。当b为1的时候,我们确实可以省掉b,我们要这么写 a++,或者 ++a,同一系列的还有 a--和--a,但是没有乘和除,原因自己想。

  为什么要有前置和后置两种写法,其实,两种写法,如果只是用来改变a的值,那么他们是一样的,他们不一样的地方,在于他们所返回的值。

  表达式是有返回值的, 1 + 2 返回3, 5 / 2 返回 2,就像前面的条件运算符,他根据判定条件,来决定是返回,1还是2,哪怕这个表达式用来赋值的,他也有返回值,a++和++a当然不能例外。a++的a在前面,他的返回值是没有+1时的a,也就是先返回a,然后再把a+1;而++a的a在后面,他的返回值是+1后的a,也就是先把a+1,再返回a。很绕么?自己写个程序试一下吧,比如这样的程序。

 1 #include<iostream>
 2 using namespace std;
 3
 4 int main() {
 5     int a = 10;
 6     cout << a++ << ‘ ‘ << a << "\n";
 7     a = 10;
 8     cout << ++a << ‘ ‘ << a << "\n";
 9     return 0;
10 }

  下一个比较可爱的东西就是关系运算符,他们包括

  == 等于

  != 不等于

  < 小于

  > 大于

  >= 大于等于

  <= 小于等于

  他们的返回值通常是true或者false, 2 == 3返回false, 6 / 2 == 3 返回 true,这里需要注意的有两点,第一是等于是==而不是=,之所以要这样处理,是因为=被我们认为是赋值表达式的运算符,为了不产生冲突,我们用==来表示等于。

  第二点也就是这一节的最后一个内容了。

  看 6 / 2 == 3这个式子, 我们认为它是先计算6/2 然后计算 X == 3,答案是true。 如果他是先计算2 == 3, 返回false 也就是 0, 6 / 0 然后程序就报错了。

  顺序怎么判断?

  如果是我给你写一个这样的式子, 6÷3 = 2,你肯定说这个式子是对的,因为你会自动计算前面。在小学,我们就被告知,× ÷要比+ -先算,后来知道了求方要比× ÷先算。我们所被告知的规律实际上并不完整,因为还有很多很多的运算是不在这5种(或者说6种)运算中的。

  在程序里,我们给不同的运算一定的优先级,优先级越高被计算的就越早。接下来,我会把已经介绍的运算符优先级,放在下面,从上到下,优先级依次递减。

  逻辑运算符 !

  算术运算符 * / %

  算术运算符 + -

  关系运算符 < > <= >=

  关系运算符 == !=

  逻辑运算符 &&

  逻辑运算符 ||

时间: 2024-10-11 00:21:38

让我们来看一看C++ 三.表达式与运算符的相关文章

[.net 面向对象程序设计进阶] (4) 正则表达式 (三) 表达式助手

[.net 面向对象程序设计进阶] (2) 正则表达式(三) 表达式助手 上面两节对正则表达式的使用及.NET下使用正则表达式作了详细说明,本节主要搜集整理了常用的正则表达式提供参考. 此外为了使用方便,编写了一个<正则表达式助手>方便测试正则表达式. 1.正则表达式助手 1.1 软件概述 软件名称: <正则表达式助手> 版本: 1.0 最后更新日期: 2015/07/01 作者: YuBinfeng 运行环境: .NET Framework 4.6及以上(常用表达式功能,需要联网

[.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用

[.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用 本节导读:讨论了表达式树的定义和解析之后,我们知道了表达式树就是并非可执行代码,而是将表达式对象化后的数据结构.是时候来引用他解决问题.而本节主要目的就是使用表达式树解决实际问题. 读前必备: 本节学习前,需要掌握以下知识: A.继承 [.net 面向对象编程基础]  (12) 面向对象三大特性——继承 B.多态 [.net 面向对象编程基础]  (13) 面向对象三大特性——多态 C.抽象类 [.net 面向

让我们来看一看C++ 简短自序

如果有个人连写博文都要写序言的话,那么无疑这个人是十分奇怪的,恰好,我就是这么一个奇怪的人. 作为一个无人问津博客的博主,我一直致力于在自己学习的同时,也能帮助别人学习.如果博客园不是一个IT社区的话,我肯定会加上很多别的东西,可是它只是一个IT社区,所以,我只能写下一篇又一篇的IT博文. 必须承认,在众多博主中,我的水平算是比较低的,至今为止,我不过懵懵懂懂的在这个圈子里转了一年多,相比那些奋斗在各个岗位的业界精英,我真的算是一只完完全全的菜鸟.而且,我目前的目的是在OI竞赛中出线,自然写不出

三、Python运算符与表达式

Python运算符与表达式 python运算符包括: 赋值运算符(=)     算术运算符(+. -. *. /. //(整数除法:5.6/2). %(求余数).**(求幂运算2**3=8))     关系运算符(<.>.=.>=.!=.==(完全等于))     逻辑运算符:连接多个比较结果(and or not) 表达式是将不同数据(包括变量.函数)用运算符按一定规则连接起来的一种式子 练习: 写一个四则运算器#!/usr/bin/pythona = int(raw_input(&q

JAVA-初步认识-第三章-比较运算符逻辑运算符

一. 运算符的总类 先列举所有的运算符类型:算术运算符,赋值运算符,比较运算符,逻辑运算符,位运算符,三元运算符. 命名为什么叫运算符,英文叫operator, 难道说这是对操作的符号化表示?可以着一些英文的原版书籍来看. 本节将讨论比较运算符和逻辑运算符,这些仍旧属于java语言基础.等到讲完语法,函数,和数组之后,才是真正进入java语言的研究. 二. 在探讨比较运算符之前,先将视频中遇到的一个问题再重新学习一下.这里DOS报的错是没有找到主类,产生这样问题的原因只有两个:java运行的类名

C#入门笔记3 表达式及运算符2

关系运算符,也称布尔比较运算符 注:var1为bool类型,var2与var3可以是其它类型.[数据类型看下一节] 运算符 类别 示例表达式 结果说明 == 二元 var1=var2==var3 如果var2等于var3,var1值为true,否则为false != 二元 var1=var2!=var3 如果var2不等于var3,var值为false,否则为true < 二元 var1=var2<var3 如果var2小于var3,var1值为true,否则为false > 二元 va

Leetcode 282.给表达式添加运算符

给表达式添加运算符 给定一个仅包含数字 0-9 的字符串和一个目标值,在数字之间添加二元运算符(不是一元)+.- 或 * ,返回所有能够得到目标值的表达式. 示例 1: 输入: num = "123", target = 6 输出: ["1+2+3", "1*2*3"] 示例 2: 输入: num = "232", target = 8 输出: ["2*3+2", "2+3*2"] 示例

JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)

1.JSP常用标签 * 只要支持JSP文件,常用标签有可以直接使用 * 格式: jsp:xxxx * jsp:forward ,完成jsp页面的转发 * page属性:转发的地址 <% request.setCharacterEncoding("UTF-8"); %> <jsp:forward page="/index.jsp"> <jsp:param value="张三" name="userName&q

.Net基础篇_学习笔记_第三天_运算符

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 第三天_C_Sharp运算符 { //练习,变成实现几天是几周零几天? class Program { static void Main(string[] args) { int days = 46; int weeks = days / 7; i