运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++ 内置了丰富的运算符,并提供了以下类型的运算符:

  • 算术运算符

  • 关系运算符

  • 逻辑运算符

  • 位运算符

  • 赋值运算符

  • 杂项运算符

本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他运算符。

算术运算符

下表显示了 C++ 支持的算术运算符。

假设变量 A 的值为 10,变量 B 的值为 20,则:

实例

请看下面的实例,了解 C++ 中可用的算术运算符。

复制并粘贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序。

实例

#include <iostream>
using namespace std;

int main()
{
  int a = 21;
  int b = 10;
  int c;

  c = a + b;
  cout << "Line 1 - c 的值是 " << c << endl ;
  c = a - b;
  cout << "Line 2 - c 的值是 " << c << endl ;
  c = a * b;
  cout << "Line 3 - c 的值是 " << c << endl ;
  c = a / b;
  cout << "Line 4 - c 的值是 " << c << endl ;
  c = a % b;
  cout << "Line 5 - c 的值是 " << c << endl ;

  int d = 10;   //  测试自增、自减
  c = d++;
  cout << "Line 6 - c 的值是 " << c << endl ;

  d = 10;    // 重新赋值
  c = d--;
  cout << "Line 7 - c 的值是 " << c << endl ;
  return 0;
}

当上面的代码被编译和执行时,它会产生以下结果:

Line 1 - c 的值是 31
Line 2 - c 的值是 11
Line 3 - c 的值是 210
Line 4 - c 的值是 2
Line 5 - c 的值是 1
Line 6 - c 的值是 10
Line 7 - c 的值是 10

关系运算符

下表显示了 C++ 支持的关系运算符。

假设变量 A 的值为 10,变量 B 的值为 20,则:

实例

请看下面的实例,了解 C++ 中可用的关系运算符。

复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序。

实例

#include <iostream>
using namespace std;

int main()
{
  int a = 21;
  int b = 10;
  int c ;

  if( a == b )
  {
     cout << "Line 1 - a 等于 b" << endl ;
  }
  else
  {
     cout << "Line 1 - a 不等于 b" << endl ;
  }
  if ( a < b )
  {
     cout << "Line 2 - a 小于 b" << endl ;
  }
  else
  {
     cout << "Line 2 - a 不小于 b" << endl ;
  }
  if ( a > b )
  {
     cout << "Line 3 - a 大于 b" << endl ;
  }
  else
  {
     cout << "Line 3 - a 不大于 b" << endl ;
  }
  /* 改变 a 和 b 的值 */
  a = 5;
  b = 20;
  if ( a <= b )
  {
     cout << "Line 4 - a 小于或等于 b" << endl ;
  }
  if ( b >= a )
  {
     cout << "Line 5 - b 大于或等于 a" << endl ;
  }
  return 0;
}

当上面的代码被编译和执行时,它会产生以下结果:

Line 1 - a 不等于 b
Line 2 - a 不小于 b
Line 3 - a 大于 b
Line 4 - a 小于或等于 b
Line 5 - b 大于或等于 a

逻辑运算符

下表显示了 C++ 支持的关系逻辑运算符。

假设变量 A 的值为 1,变量 B 的值为 0,则:

实例

请看下面的实例,了解 C++ 中可用的逻辑运算符。

复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序。

实例

#include <iostream>
using namespace std;

int main()
{
  int a = 5;
  int b = 20;
  int c ;

  if ( a && b )
  {
     cout << "Line 1 - 条件为真"<< endl ;
  }
  if ( a || b )
  {
     cout << "Line 2 - 条件为真"<< endl ;
  }
  /* 改变 a 和 b 的值 */
  a = 0;
  b = 10;
  if ( a && b )
  {
     cout << "Line 3 - 条件为真"<< endl ;
  }
  else
  {
     cout << "Line 4 - 条件不为真"<< endl ;
  }
  if ( !(a && b) )
  {
     cout << "Line 5 - 条件为真"<< endl ;
  }
  return 0;
}

当上面的代码被编译和执行时,它会产生以下结果:

Line 1 - 条件为真
Line 2 - 条件为真
Line 4 - 条件不为真
Line 5 - 条件为真

位运算符

位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:

假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:

A = 0011 1100

B = 0000 1101

-----------------

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A  = 1100 0011

下表显示了 C++ 支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:

实例

请看下面的实例,了解 C++ 中可用的位运算符。

复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序。

实例

#include <iostream>
using namespace std;

int main()
{
  unsigned int a = 60;      // 60 = 0011 1100  
  unsigned int b = 13;      // 13 = 0000 1101
  int c = 0;           

  c = a & b;             // 12 = 0000 1100
  cout << "Line 1 - c 的值是 " << c << endl ;

  c = a | b;             // 61 = 0011 1101
  cout << "Line 2 - c 的值是 " << c << endl ;

  c = a ^ b;             // 49 = 0011 0001
  cout << "Line 3 - c 的值是 " << c << endl ;

  c = ~a;                // -61 = 1100 0011
  cout << "Line 4 - c 的值是 " << c << endl ;

  c = a << 2;            // 240 = 1111 0000
  cout << "Line 5 - c 的值是 " << c << endl ;

  c = a >> 2;            // 15 = 0000 1111
  cout << "Line 6 - c 的值是 " << c << endl ;

  return 0;
}

当上面的代码被编译和执行时,它会产生以下结果:

Line 1 - c 的值是 12
Line 2 - c 的值是 61
Line 3 - c 的值是 49
Line 4 - c 的值是 -61
Line 5 - c 的值是 240
Line 6 - c 的值是 15

赋值运算符

下表列出了 C++ 支持的赋值运算符:

实例

请看下面的实例,了解 C++ 中可用的赋值运算符。

复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序。

实例

#include <iostream>
using namespace std;

int main()
{
  int a = 21;
  int c ;

  c =  a;
  cout << "Line 1 - =  运算符实例,c 的值 = : " <<c<< endl ;

  c +=  a;
  cout << "Line 2 - += 运算符实例,c 的值 = : " <<c<< endl ;

  c -=  a;
  cout << "Line 3 - -= 运算符实例,c 的值 = : " <<c<< endl ;

  c *=  a;
  cout << "Line 4 - *= 运算符实例,c 的值 = : " <<c<< endl ;

  c /=  a;
  cout << "Line 5 - /= 运算符实例,c 的值 = : " <<c<< endl ;

  c  = 200;
  c %=  a;
  cout << "Line 6 - %= 运算符实例,c 的值 = : " <<c<< endl ;

  c <<=  2;
  cout << "Line 7 - <<= 运算符实例,c 的值 = : " <<c<< endl ;

  c >>=  2;
  cout << "Line 8 - >>= 运算符实例,c 的值 = : " <<c<< endl ;

  c &=  2;
  cout << "Line 9 - &= 运算符实例,c 的值 = : " <<c<< endl ;

  c ^=  2;
  cout << "Line 10 - ^= 运算符实例,c 的值 = : " <<c<< endl ;

  c |=  2;
  cout << "Line 11 - |= 运算符实例,c 的值 = : " <<c<< endl ;

  return 0;
}

当上面的代码被编译和执行时,它会产生以下结果:

Line 1 - =  运算符实例,c 的值 = 21
Line 2 - += 运算符实例,c 的值 = 42
Line 3 - -= 运算符实例,c 的值 = 21
Line 4 - *= 运算符实例,c 的值 = 441
Line 5 - /= 运算符实例,c 的值 = 21
Line 6 - %= 运算符实例,c 的值 = 11
Line 7 - <<= 运算符实例,c 的值 = 44
Line 8 - >>= 运算符实例,c 的值 = 11
Line 9 - &= 运算符实例,c 的值 = 2
Line 10 - ^= 运算符实例,c 的值 = 0
Line 11 - |= 运算符实例,c 的值 = 2

杂项运算符

下表列出了 C++ 支持的其他一些重要的运算符。

C++ 中的运算符优先级

运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。

例如 x = 7 + 3 * 2,在这里,x 被赋值为 13,而不是 20,因为运算符 * 具有比 + 更高的优先级,所以首先计算乘法 3*2,然后再加上 7。

下表将按运算符优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,较高优先级的运算符会优先被计算。

实例

请看下面的实例,了解 C++ 中运算符的优先级。

复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序。

对比有括号和没有括号时的区别,这将产生不同的结果。因为 ()、 /、 * 和 + 有不同的优先级,高优先级的操作符将优先计算。

实例

#include <iostream>
using namespace std;

int main()
{
  int a = 20;
  int b = 10;
  int c = 15;
  int d = 5;
  int e;

  e = (a + b) * c / d;      // ( 30 * 15 ) / 5
  cout << "(a + b) * c / d 的值是 " << e << endl ;

  e = ((a + b) * c) / d;    // (30 * 15 ) / 5
  cout << "((a + b) * c) / d 的值是 " << e << endl ;

  e = (a + b) * (c / d);   // (30) * (15/5)
  cout << "(a + b) * (c / d) 的值是 " << e << endl ;

  e = a + (b * c) / d;     //  20 + (150/5)
  cout << "a + (b * c) / d 的值是 " << e << endl ;
 
  return 0;
}

当上面的代码被编译和执行时,它会产生以下结果:

(a + b) * c / d 的值是 90
((a + b) * c) / d 的值是 90
(a + b) * (c / d) 的值是 90
a + (b * c) / d 的值是 50

C++基础知识篇:C++ 运算符的更多相关文章

  1. 【Java面试】基础知识篇

    [Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...

  2. 【Java面试】1、基础知识篇

    [Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充. 源码分享:https: ...

  3. Java白皮书学习笔记+Head First Java--用于自我复习 基础知识篇

    本笔记是摘与Hava白皮书上面的内容,用来给自己做提醒的,因此大概并不适合Java的学习者作为笔记参考使用. 以我的水平现在还看不懂这个... 一.基础知识篇 1.常量 final关键字指示常量,只能 ...

  4. Java 面试知识点解析(一)——基础知识篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  5. 「Java面试题/知识点精华集」20000+字的Java基础知识篇(2020最新版) !

    本文已经收录进我的 79K Star 的 Java 开源项目 JavaGuide:https://github.com/Snailclimb/JavaGuide (「Java学习+面试指南」一份涵盖大 ...

  6. CSS3 的box-shadow进阶之 - 基础知识篇

    box-shadow被认为是CSS3最好的特性之一,发挥想象力,搭配其它属性,可以做出很多好看的效果(如下图,将会放在下一篇文章讲解),这篇文章主要讲一下box-shadow的基础知识.       ...

  7. LeetCode刷题191130 --基础知识篇 二叉搜索树

    休息了两天,状态恢复了一下,补充点基础知识. 二叉搜索树 搜索树数据结构支持许多动态集合操作,包括Search,minimum,maximum,predecessor(前驱),successor(后继 ...

  8. Java学习之旅基础知识篇:数据类型及流程控制

    经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...

  9. Java多线程基础知识篇

    这篇是Java多线程基本用法的一个总结. 本篇文章会从一下几个方面来说明Java多线程的基本用法: 如何使用多线程 如何得到多线程的一些信息 如何停止线程 如何暂停线程 线程的一些其他用法 所有的代码 ...

随机推荐

  1. 【总结】redis

    一.redis概述 1.nosql概念 NoSql:即Not-onlySQL.非关系型数据库,作为关系型数据库的补充 2.redis概念 redis(remote dictionary server) ...

  2. 云计算管理平台之OpenStack启动虚拟机实例

    在前边的博客中,我们主要聊了下openstack的基础环境.核心服务(认证服务keystone/镜像服务glance/计算服务nova/网络服务neutron)的安装配置:回顾请查看前边的博客:今天我 ...

  3. Charles使用part4——修改网络请求

    Charles提供了Map功能.Rewrite功能.Breakpoints功能,都可以达到修改服务器返回内容的目的,这三者的差异是: Map功能适合长期的将某些请求重定向到另一个网络地址或本地文件   ...

  4. NOIP 2018 D1 解题报告(Day_1)

    总分   205分 T1 100分 T2  95分 T3  10分 T1: 题目描述 春春是一名道路工程师,负责铺设一条长度为 nn 的道路. 铺设道路的主要工作是填平下陷的地表.整段道路可以看作是  ...

  5. P5691 [NOI2001]方程的解数

    题意描述 方程的解数 求方程 \(\sum_{i=1}^{n}k_ix_i^{p_i}=0(x_i\in [1,m])\) 的解的个数. 算法分析 远古 NOI 的题目就是水 类似于这道题. 做过这道 ...

  6. Hash 算法与 Manacher 算法

    目录 前言 简单介绍 简述 Hash 冲突 离散化 基本结构 普通 Hash 简述 例题 字符串 Hash 简单介绍 核心思想 基本运算 二维字符串 Hash 例题 兔子与兔子 回文子串的最大长度 后 ...

  7. python爬虫03 Urllib库

    Urllib   这可是 python 内置的库 在 Python 这个内置的 Urllib 库中 有这么 4 个模块 request request模块是我们用的比较多的 就是用它来发起请求 所以我 ...

  8. SpringBoot第九集:整合JSP和模板引擎Freemarker/Thymeleaf(2020最新最易懂)

    SpringBoot第九集:整合JSP和模板引擎(2020最新最易懂) 当客户通过前端页面提交请求后,我们以前是怎么做的?后端接收请求数据,处理请求,把响应结果交给模板引擎JSP,最后将渲染后的JSP ...

  9. MSSQL sql numeric转字符串显示不补0

    由于工作中需要把numeric转字符串显示,但是有一个问题会自动补0. DECLARE @f NUMERIC(18,4)=1.1200, @str VARCHAR(50) SELECT CAST(@f ...

  10. 探索 .Net Core 的 SourceLink

    介绍 Source Link是一组软件包和一个规范, 它将一些元数据添加到PDB文件,以将本地文件重新映射到GitHub上的文件,因此Visual Studio可以在这需要时下载文件, 该项目的目的是 ...