C++重新入门-C++运算符

news2024/11/26 2:38:38

目录

1. 算术运算符

2. 关系运算符

3.逻辑运算符

4.位运算符

5.赋值运算符

6.杂项运算符

7.C++ 中的运算符优先级


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

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 杂项运算符

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

1. 算术运算符

下表显示了 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

2. 关系运算符

C++中的关系运算符用于比较两个值之间的关系,并返回一个布尔值(true或false)表示比较的结果。下面是C++中常用的关系运算符及其含义:

  1. ==(等于):用于检查两个值是否相等。如果两个值相等,则返回true;否则返回false。

  2. !=(不等于):用于检查两个值是否不相等。如果两个值不相等,则返回true;否则返回false。

  3. <(小于):用于检查左操作数是否小于右操作数。如果左操作数小于右操作数,则返回true;否则返回false。

  4. >(大于):用于检查左操作数是否大于右操作数。如果左操作数大于右操作数,则返回true;否则返回false。

  5. <=(小于等于):用于检查左操作数是否小于或等于右操作数。如果左操作数小于或等于右操作数,则返回true;否则返回false。

  6. >=(大于等于):用于检查左操作数是否大于或等于右操作数。如果左操作数大于或等于右操作数,则返回true;否则返回false。

 

#include <iostream>
using namespace std;

int main() {
    int A = 5;
    int B = 10;

    // 等于
    cout << "A == B: " << (A == B) << endl; // 输出 0(false)

    // 不等于
    cout << "A != B: " << (A != B) << endl; // 输出 1(true)

    // 小于
    cout << "A < B: " << (A < B) << endl;   // 输出 1(true)

    // 大于
    cout << "A > B: " << (A > B) << endl;   // 输出 0(false)

    // 小于等于
    cout << "A <= B: " << (A <= B) << endl; // 输出 1(true)

    // 大于等于
    cout << "A >= B: " << (A >= B) << endl; // 输出 0(false)

    return 0;
}

在这个例子中,变量A的值为5,变量B的值为10。通过使用不同的关系运算符,我们可以比较这两个变量的值,并输出比较结果。

3.逻辑运算符

逻辑运算符用于在布尔表达式中组合和操作布尔值。C++中常用的逻辑运算符有以下几种:

  1. &&(逻辑与):如果两个操作数都为true,则结果为true;否则为false。

  2. ||(逻辑或):如果两个操作数中至少有一个为true,则结果为true;否则为false。

  3. !(逻辑非):用于取反操作,如果操作数为true,则结果为false;如果操作数为false,则结果为true。

#include <iostream>
using namespace std;

int main() {
    bool A = true;
    bool B = false;

    // 逻辑与
    cout << "A && B: " << (A && B) << endl; // 输出 0(false)

    // 逻辑或
    cout << "A || B: " << (A || B) << endl; // 输出 1(true)

    // 逻辑非
    cout << "!A: " << (!A) << endl;         // 输出 0(false)
    cout << "!B: " << (!B) << endl;         // 输出 1(true)

    return 0;
}

 在这个例子中,我们定义了两个布尔变量A和B,分别赋值为true和false。然后我们使用逻辑运算符来组合和操作这两个布尔值,并输出结果。

4.位运算符

位运算符用于对整数的二进制表示进行位操作。C++中常用的位运算符有以下几种:

  1. &(按位与):对两个操作数的每一位执行逻辑与操作,只有当两个操作数的对应位都为1时,结果的对应位才为1,否则为0。

  2. |(按位或):对两个操作数的每一位执行逻辑或操作,只要两个操作数的对应位中至少有一个为1,结果的对应位就为1,否则为0。

  3. ^(按位异或):对两个操作数的每一位执行异或操作,只有当两个操作数的对应位不相同时,结果的对应位才为1,否则为0。

  4. ~(按位取反):对操作数的每一位执行取反操作,将1变为0,将0变为1。

  5. <<(左移):将操作数的所有位向左移动指定的位数,低位补0。

  6. >>(右移):将操作数的所有位向右移动指定的位数,高位根据移位运算符的类型(算术右移或逻辑右移)补0或保持符号位不变。

#include <iostream>
using namespace std;

int main() {
    int A = 5; // 二进制表示为 101
    int B = 3; // 二进制表示为 011

    // 按位与
    cout << "A & B: " << (A & B) << endl; // 输出 1(二进制 001)

    // 按位或
    cout << "A | B: " << (A | B) << endl; // 输出 7(二进制 111)

    // 按位异或
    cout << "A ^ B: " << (A ^ B) << endl; // 输出 6(二进制 110)

    // 按位取反
    cout << "~A: " << (~A) << endl;       // 输出 -6

    // 左移
    cout << "A << 1: " << (A << 1) << endl; // 输出 10(二进制 1010)

    // 右移
    cout << "B >> 1: " << (B >> 1) << endl; // 输出 1(二进制 001)

    return 0;
}

 在这个例子中,我们定义了两个整数变量A和B,分别赋值为5和3,其二进制表示分别为101和011。然后我们使用位运算符对这两个整数进行位操作,并输出结果。

5.赋值运算符

赋值运算符用于将右侧的值赋给左侧的操作数。在C++中,常见的赋值运算符是=。除了简单的赋值运算符之外,还有一些复合赋值运算符,它们将算术运算符与赋值操作结合起来,如+=-=*=/=等。

以下是一些常见的赋值运算符及其示例:

#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;
}

6.杂项运算符

杂项运算符包括了一些在C++中不容易归类到其他类别的运算符。

  1. sizeof:用于获取变量或类型的大小(以字节为单位)。

  2. ?:(条件运算符):也称为三元运算符,用于根据条件选择两个表达式之一的值。

  3. ,(逗号运算符):用于在一个语句中顺序执行多个表达式,并返回最后一个表达式的值。

  4. .->(成员访问运算符):用于访问结构体或类的成员。

  5. typeid:用于返回表达式的运行时类型信息。

  6. static_cast, dynamic_cast, const_cast, reinterpret_cast:用于类型转换。

  7. newdelete:用于动态内存分配和释放。

  8. ::(作用域解析运算符):用于标识命名空间成员或全局作用域中的变量或函数。

  9. sizeof...(参数包长度运算符):用于获取参数包的长度。

  10. #(预处理运算符):用于在预处理阶段操作字符串。

这些运算符在不同的情境下有不同的用途,它们为C++提供了更大的灵活性和功能。在实际编程中,它们经常被使用到。

 

#include <iostream>
using namespace std;

int main() {
    int array[5];
    cout << "Size of array: " << sizeof(array) << " bytes" << endl; // 输出数组的大小(以字节为单位)
    cout << "Size of int: " << sizeof(int) << " bytes" << endl;       // 输出整型变量的大小(以字节为单位)
    return 0;
}

#include <iostream>
using namespace std;

int main() {
    int a = 10;
    int b = 5;
    int max = (a > b) ? a : b; // 如果a大于b,返回a的值;否则返回b的值
    cout << "Max value: " << max << endl; // 输出10
    return 0;
}

#include <iostream>
using namespace std;

int main() {
    int a = 5, b = 10, c = 15;

    // 使用逗号运算符初始化多个变量
    int sum = (a += 2, b += 3, c += 4); // 逗号运算符按顺序执行表达式,并返回最后一个表达式的值
    cout << "Sum: " << sum << endl;     // 输出最后一个表达式的值,即 c += 4 的结果

    // 输出修改后的变量值
    cout << "a: " << a << endl; // 输出 7
    cout << "b: " << b << endl; // 输出 13
    cout << "c: " << c << endl; // 输出 19

    return 0;
}


#include <iostream>
using namespace std;

struct Point {
    int x;
    int y;
};

int main() {
    Point p1;
    p1.x = 10;
    p1.y = 20;
    cout << "Point p1: (" << p1.x << ", " << p1.y << ")" << endl; // 输出p1的坐标值
    return 0;
}


#include <iostream>
using namespace std;

#define PI 3.14159

int main() {
    cout << "Value of PI: " << PI << endl; // 输出宏定义PI的值
    return 0;
}


 

7.C++ 中的运算符优先级

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

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

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

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1444455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小游戏和GUI编程(3) | 基于 SFML 的字符阵

小游戏和GUI编程(3) | 基于 SFML 的字符阵 1. 简介 使用 EasyX 图形库时&#xff0c; 官方第一个例子是字符阵。 EasyX 不开源&#xff0c; 也不能跨平台&#xff0c; API 陈旧&#xff0c; API 是 C 而不是 C。 现在使用 SFML 来实现字符阵&#xff0c; 克服 EasyX 的这些问…

【前端】Vue实现网站导航 以卡片形式显示(附Demo)

目录 前言1. html版本2. Vue2.1 Demo12.2 Demo2 前言 单独做一个跳转页面推荐阅读&#xff1a;【前端】实现Vue组件页面跳转的多种方式 但是如果网站多了&#xff0c;推荐卡片式导航&#xff0c;具体可看下文&#xff1a;&#xff08;以图片显示显示各个网站&#xff0c;图片…

【安装记录】安装 netperf 和 perf

这是一篇发疯随笔X.X 我的环境是虚拟机debian12&#xff0c;出于种种原因&#xff0c;之前直接使用apt-get install netperf apt-get install perf指令直接安装&#xff0c;报错找不到包 然后上网搜了一堆教程&#xff0c;有说下载netperf源码编译的&#xff0c;那些教程里面有…

sheng的学习笔记-docker部署数据库oracle,mysql

部署目录&#xff1a;sheng的学习笔记-部署-目录-CSDN博客 docker基础知识可参考 sheng的学习笔记-docker部署&#xff0c;原理图&#xff0c;命令&#xff0c;用idea设置docker docker安装数据库 mac版本 安装oracle 下载oracle镜像 打开终端&#xff0c;输入 docker s…

社区团购系统-UMLChina建模知识竞赛第5赛季第6轮

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答。 只要最先答对前3题&#xff0c;即可获得本轮优胜。 如果有第4题&#xff0c;第4题为附加题&am…

【JMX】JAVA监控的基石

目录 1.概述 2.MBean 2.1.Standard MBean 2.2.Dynamic MBean 2.3.Model Bean 2.4.Dynamic MBean和Model Bean的区别 2.5.MXBean 2.6.Open Bean 3.控制台 1.概述 什么是JMX&#xff0c;首先来看一段对话&#xff1a; Java Management Extensions&#xff08;JMX&#…

猫头虎分享已解决Bug || 日志文件过大(Log File Oversize):LogFileOverflow, ExcessiveLoggingError

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

C++构造和折构函数详解,超详细!

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 大家龙年好呀&#xff0c;今天我们来学习一下C构造函数和折构函数。 文章目录 1.构造函数 1.1构造函数的概念 1.2构造函数的思想 1.3构造函数的特点 1.4构造函数的作用 1.5构造函数的操作 1.6构造函数…

电子电器架构 —— 对车载软件开发新阶段的愿景

电子电器架构 —— 对车载软件开发新阶段的愿景 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝…

使用C++从零开始,自己写一个MiniWeb

第一步&#xff1a;新建项目 1、打开VS点击创建新项目 2、选择空项目并点下一步&#xff08;切记不能选错项目类型&#xff09; 3、填写项目名称和路径&#xff0c;点击创建即可 新建好后项目是这样的比较干净 4、右击源文件&#xff0c;点击添加&#xff0c;新建http.cpp文件…

【华为云】容灾方案两地三中心实践理论

应用上云之后&#xff0c;如何进行数据可靠性以及业务连续性的保障是非常关键的&#xff0c;通过华为云云上两地三中心方案了解相关方案认证地址&#xff1a;https://connect.huaweicloud.com/courses/learn/course-v1:HuaweiXCBUCNXI057Self-paced/about当前内容为灾备常见理论…

代码随想录 Leetcode55. 跳跃游戏

题目&#xff1a; 代码(首刷自解 2024年2月9日&#xff09;&#xff1a; class Solution { public:bool canJump(vector<int>& nums) {int noz 0;for (int i nums.size() - 2; i > 0; --i) {if (nums[i] 0) {noz;continue;} else {if (nums[i] > noz) noz …

【Java八股面试系列】JVM-class文件结构

Class文件结构总结 根据 Java 虚拟机规范&#xff0c;Class 文件通过 ClassFile 定义&#xff0c;有点类似 C 语言的结构体。我们之前都是使用javap命令来对字节码文件进行反编译查看的&#xff0c;我们可以使用WinHex软件&#xff08;Mac平台可以使用010 Editor&#xff09;来…

假期day7

设计qq界面 代码 ui->lab1->setPixmap(QPixmap(":/pictrue/denglu.webp"));ui->lab1->setScaledContents(true);ui->lab2->setPixmap(QPixmap(":/pictrue/passwd.jpg"));ui->lab2->setScaledContents(true);ui->lab3->setP…

Elasticsearch:使用查询规则(query rules)进行搜索

在之前的文章 “Elasticsearch 8.10 中引入查询规则 - query rules”&#xff0c;我们详述了如何使用 query rules 来进行搜索。这个交互式笔记本将向你介绍如何使用官方 Elasticsearch Python 客户端来使用查询规则。 你将使用 query rules API 将查询规则存储在 Elasticsearc…

Java奠基】对象数组练习

目录 商品对象信息获取 商品对象信息输入 商品对象信息计算 商品对象信息统计 学生数据管理实现 商品对象信息获取 题目要求是这样的&#xff1a; 定义数组存储3个商品对象。 商品的属性&#xff1a;商品的id&#xff0c;名字&#xff0c;价格&#xff0c;库存。 创建三个…

Pytorch卷积层原理和示例 nn.Conv1d卷积 nn.Conv2d卷积

内容列表 一&#xff0c;前提 二&#xff0c;卷积层原理 1.概念 2.作用 3. 卷积过程 三&#xff0c;nn.conv1d 1&#xff0c;函数定义&#xff1a; 2, 参数说明: 3,代码: 4, 分析计算过程 四&#xff0c;nn.conv2d 1, 函数定义 2, 参数&#xff1a; 3, 代码 4, 分析计算过程 …

Netty应用(七) 之 Handler Netty服务端编程总结

目录 15.Handler 15.1 handler的分类 15.1.1 按照方向划分 15.1.2 handler的结构 15.2 输入方向ChannelInboundHandlerAdapter 15.2.1 输出方向Handler的顺序 15.2.2 多个输入方向Handler之间的数据传递 15.2.2.1 handler消失了 15.2.2.2 手动编写netty提供的new Strin…

一个查看armv8系统寄存器-值-含义的方式

找到解压后的SysReg_xml_v86A-2019-12目录 wget https://developer.arm.com/-/media/developer/products/architecture/armv8-a-architecture/2019-12/SysReg_xml_v86A-2019-12.tar.gz wget https://developer.arm.com/-/media/developer/products/architecture/armv8-a-archi…

(已解决)将overleaf上的文章paper上传到arxiv上遇到的问题。

文章目录 前言初级问题后续问题 前言 首先说一点&#xff0c;将paper的pdf文件直接上传arxiv是不行的&#xff0c;arxiv要求我们要上传源文件&#xff0c;所以才这么麻烦。 初级问题 首先上传文件之后有可能会在下面这个界面出现问题&#xff0c;这里一般都比较常见的问题&a…