文档章节

【Essential C++ 学习笔记】第一章 基础编程 - 运算符篇

JokerHuang
 JokerHuang
发布于 2016/08/15 21:52
字数 1266
阅读 5
收藏 0
点赞 0
评论 0

本章导航

初识 C++

运算符

控制语句

数组和向量

初识指针

文件的读写


运算符

基础运算符

因为 C++ 是强类型的编程语言, 所以在基础运算符中唯一需要注意的是除法运算模运算外, 其他并无出奇之处.

运算符含义/作用
+加法运算符
-减法运算符
*乘法运算符
/除法运算符
%模运算符

除法运算符和模运算符的差别

两个整数相除, 结果将还是整数, 小数部分将被舍弃. 如果需要得到小数部分, 需要至少保证除数, 被除数有一个是浮点数.

整数 = 整数 / 整数;

浮点数 = 整数 / 浮点数;

浮点数 = 浮点数 / 浮点数;

而倘若想要获得整数除法运算当中未被除尽的余数部分, 则需要使用模运算符.

int a = 8, b = 3, c;
c = a % b; // 此时 c = 2

复合运算符和递增、递减运算符

复合运算符比较好理解, 在基础运算符的基础上连上一个赋值运算符形成复合运算符方便使用.

而递增、递减运算符则是在原有值的基础上 +1、-1 来计算新值, 值得注意的是递增、递减运算符分为前置后置两种, 其在表达式中的含义也不同, 后面将用例子来演示其不同处.

运算符含义/作用
+=加等于
-=减等于
*=乘等于
/=除等于
%=模等于
++递增运算符
--递减运算符

递增、递减运算符分为前置、后置两种情况, 代表了先递增(或先递减)再使用, 用例子来说就是:

int a, result;
const int c = 10;

a = 5;
result = a++; // result = 5; a = 6;

a = 5;
result = a--; // result = 5; a = 4;

a = 5;
result = c + (++a); // result = 16; a = 6;

a = 5;
result = c + (a++); // result = 15; a = 6;

a = 5;	
result = c + (--a); // result = 14; a = 4;

a = 5;
result = c + (a--); // result = 15; a = 4;

关系运算符

关系运算符用作比较两个值的关系, 核定结果只有可能是 true 或者 false.

并没有什么特殊的, 唯一需要注意的是 赋值运算符相等运算符的区分, 比较容易混淆

运算符含义/作用
>大于
>=大于等于
<小于
<=小于等于
==相等
!=不相等

逻辑运算符

逻辑运算符把语句连接成更复杂的复杂语句。也没什么特殊的,关键在于后一部分讲解的优先级。

运算符含义/作用
IIOR 逻辑运算符(应该是两根竖线,markdown 语法不允许,用英文字母 I 代替了)
&&AND 逻辑运算符
!NOT 逻辑运算符

运算符优先级

当同时存在多个运算符的时候,如何正确的表达出我们想要的表达式意思,则需要通过运算符的优先级来确认。

如果想要改变优先级的顺序,可以使用小括号来改变。

下表表示了一套运算符的优先级顺序,位置在上者表示优先级越高,同行表示同样级别的优先级,计算顺序从左向右。

运算符含义/作用
逻辑运算符!
算术运算符*、/、%
算术运算符+、-
逻辑运算符>、>=、<、<=、
逻辑运算符==、!=
逻辑运算符&
逻辑运算符II
赋值运算符=

运算符优先级实例

举个例子,倘若我们想判断 ival 是否是偶数,我们可以这么写:

! ival % 2;

假如 ival 是偶数,则条件为 true,否则条件判断为 false。看语义没问题,但是结果却不尽如人意,除非 ival 为 0,否则这个表达式要一直是 false。

为什么呢?原因在于 NOT 运算符的优先级高于 % 运算符,先计算 ival 的 NOT 运算,再计算 % 运算。

我们知道在 C++ 中 false 在算术表达式中被视为 0,true 在算术表达式中被视为 1,所以,除非 ival 为 0,否则表达式将一直有被语义。


心得体会

第一次这样写学习笔记,有点不太适应,内容也有点乱糟糟,希望通过学习 Essential C++ 这本书,一来让我对 C++ 有个更好的入门体验,二来也提高下自己的文笔。各位大神如果发现有不对的地方请指正,大家一起学习。如果要转请注明出处来自JokerHuang,不过我觉得也没人会转...

© 著作权归作者所有

共有 人打赏支持
JokerHuang
粉丝 3
博文 6
码字总数 7272
作品 0
苏州
高级程序员
C语言编程学习运算符的优先级和结合性

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/25 ⋅ 0

史上最全面的C语言的学习路线及方法

UNIX下C语言的学习路线。 工具篇 “公欲善其事,必先利其器”。编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工...

stone15165 ⋅ 04/18 ⋅ 0

大神有话说之c++,还在迷茫的朋友可以来看一下

C++ 是一种中级语言,它是由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,是一种面向对象的程序设计语言。C++ 可运行于多种平台上,如 Window...

悟空_b201 ⋅ 05/30 ⋅ 0

C语言/C++编程学习强势之处的体现

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/12 ⋅ 0

期末复习之C语言编程基础知识梳理

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 03/18 ⋅ 0

在学校和老师学习C/C++你学到了什么?

计算机行业在未来是一个具有无限潜力的行业,但同样行业竞争力也是十分强烈,同样事靠计算机吃饭的,你是职业叫码农,人家的职业叫程序员,大牛的职业是架构师、分析师,你甘心成为一个日夜加...

悟空_b201 ⋅ 04/10 ⋅ 0

VS2010/MFC编程入门教程之目录和总结(鸡啄米)

鸡啄米的这套VS2010/MFC编程入门教程到此就全部完成了,虽然有些内容还未涉及到,但帮助大家进行VS2010/MFC的入门学习业已足够。以此教程的知识为基础,学习VS2010/MFC较为深入的内容已非难事...

weixin_40647819 ⋅ 05/23 ⋅ 0

如何自学成为C/C++程序员大牛

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/11 ⋅ 0

C语言编程新手学习基础知识点大总结!小白入门必备

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/13 ⋅ 0

C语言/C++编程新手学习常见问题

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 40分钟前 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 59分钟前 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

到底会改名吗?微软GVFS 改名之争

微软去年透露了 Git Virtual File System(GVFS)项目,GVFS 是 Git 版本控制系统的一个开源插件,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。该项目公布之初就引发了争...

linux-tao ⋅ 今天 ⋅ 0

笔试题之Java基础部分【简】【二】

1.静态变量和实例变量的区别 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变...

anlve ⋅ 今天 ⋅ 0

Lombok简单介绍及使用

官网 通过简单注解来精简代码达到消除冗长代码的目的 优点 提高编程效率 使代码更简洁 消除冗长代码 避免修改字段名字时忘记修改方法名 4.idea中安装lombnok pom.xml引入 <dependency> <grou...

to_ln ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部