【C++】基础复习 运算符|算数、关系、逻辑、赋值、位运算符

文章目录

  • 1 算术运算符
    • 1.1 整数除法
    • 1.2 浮点数除法
    • 1.3 混合运算
  • 2 关系运算符
  • 3 逻辑运算符
  • 4 赋值运算符
  • 5 位运算符
  • 6 条件运算符(三元运算符)
  • 7 其他重点补充

1 算术运算符

算术运算符用于执行基本的数学运算。

运算符描述示例结果
+加法a + b两数相加
-减法a - b两数相减
*乘法a * b两数相乘
/除法a / b两数相除
%取模a % b取余数
++自增++aa++前置自增或后置自增
--自减--aa--前置自减或后置自减

C++ 中的取余操作符 % 要求操作数必须都是整数类型。

其中对于除法而言,注意一些易错点

在 C++ 中,除法运算符 / 用于将一个数除以另一个数。根据操作数的类型(整数或浮点数),除法运算的结果会有所不同。

1.1 整数除法

整数除法会截断小数部分,仅返回商的整数部分。

示例代码:

#include <iostream>int main() {int a = 7;int b = 3;int result = a / b; // 整数除法std::cout << "7 / 3 = " << result << std::endl; // 输出: 7 / 3 = 2return 0;
}

在这个例子中,7 / 3 的结果是 2,因为整数除法会舍弃小数部分。

1.2 浮点数除法

浮点数除法会保留小数部分,返回精确的商。

示例代码:

#include <iostream>int main() {double a = 7.0;double b = 3.0;double result = a / b; // 浮点数除法std::cout << "7.0 / 3.0 = " << result << std::endl; // 输出: 7.0 / 3.0 = 2.33333return 0;
}

在这个例子中,7.0 / 3.0 的结果是 2.33333,保留了小数部分。

1.3 混合运算

如果两个操作数一个是整数,一个是浮点数,结果会是浮点数。

示例代码:

#include <iostream>int main() {int a = 7;double b = 3.0;double result = a / b; // 混合类型除法std::cout << "7 / 3.0 = " << result << std::endl; // 输出: 7 / 3.0 = 2.33333return 0;
}

注意避免除0

2 关系运算符

关系运算符用于比较两个值,结果是布尔值 truefalse

常常用作条件判断

运算符描述示例结果
==等于a == b如果相等,返回 true
!=不等于a != b如果不等,返回 true
>大于a > b如果大于,返回 true
<小于a < b如果小于,返回 true
>=大于等于a >= b如果大于等于,返回 true
<=小于等于a <= b如果小于等于,返回 true

注意多精度浮点型,比较是否相等,应该用一个差值精度去判断

3 逻辑运算符

逻辑运算符用于执行布尔逻辑运算。

常常用作条件判断

运算符描述示例结果
&&逻辑与a && b如果两个操作数都为 true,返回 true
``逻辑或
!逻辑非!a如果操作数为 false,返回 true

4 赋值运算符

赋值运算符用于给变量赋值。

运算符描述示例结果
=赋值a = b将 b 的值赋给 a
+=加并赋值a += ba = a + b
-=减并赋值a -= ba = a - b
*=乘并赋值a *= ba = a * b
/=除并赋值a /= ba = a / b
%=取模并赋值a %= ba = a % b

5 位运算符

位运算符用于对整数类型的二进制位进行操作。

常常进行运算

运算符描述示例结果
&位与a & b对应位都为 1,结果才为 1
``位或`a
^位异或a ^ b对应位不同,结果为 1
~位取反~a将所有位取反
<<左移a << b将 a 的所有位向左移 b 位
>>右移a >> b将 a 的所有位向右移 b 位

6 条件运算符(三元运算符)

条件运算符用于根据一个布尔表达式的结果返回不同的值。

运算符描述示例结果
?:条件运算符condition ? expr1 : expr2如果 condition 为 true,返回 expr1;否则返回 expr2

示例:

#include <iostream>int main() {int a = 10;int b = 20;// 算术运算符std::cout << "a + b = " << (a + b) << std::endl;std::cout << "a - b = " << (a - b) << std::endl;std::cout << "a * b = " << (a * b) << std::endl;std::cout << "a / b = " << (a / b) << std::endl;std::cout << "a % b = " << (a % b) << std::endl;// 关系运算符std::cout << "a == b: " << (a == b) << std::endl;std::cout << "a != b: " << (a != b) << std::endl;std::cout << "a > b: " << (a > b) << std::endl;std::cout << "a < b: " << (a < b) << std::endl;std::cout << "a >= b: " << (a >= b) << std::endl;std::cout << "a <= b: " << (a <= b) << std::endl;// 逻辑运算符std::cout << "(a < b) && (a > 0): " << ((a < b) && (a > 0)) << std::endl;std::cout << "(a > b) || (a > 0): " << ((a > b) || (a > 0)) << std::endl;std::cout << "!(a == b): " << (!(a == b)) << std::endl;// 赋值运算符int c = a;c += b;std::cout << "c += b: " << c << std::endl;c -= b;std::cout << "c -= b: " << c << std::endl;// 位运算符int x = 5;  // 0101int y = 3;  // 0011std::cout << "x & y: " << (x & y) << std::endl;  // 0001std::cout << "x | y: " << (x | y) << std::endl;  // 0111std::cout << "x ^ y: " << (x ^ y) << std::endl;  // 0110std::cout << "~x: " << (~x) << std::endl;        // 1010 (in two's complement)std::cout << "x << 1: " << (x << 1) << std::endl; // 1010std::cout << "x >> 1: " << (x >> 1) << std::endl; // 0010// 条件运算符int max = (a > b) ? a : b;std::cout << "max: " << max << std::endl;return 0;
}

通过理解和掌握这些运算符,可以在 C++ 中高效地进行各种计算和操作,提高编程效率和代码的可读性。

7 其他重点补充

在 C++ 中,浮点数比较是否相等时,应该用一个差值精度去判断,而不是直接使用 == 运算符。这是因为浮点数在计算机中存储时存在精度问题。浮点数的表示在二进制系统中可能无法完全精确地表示某些十进制数,因此直接比较浮点数可能会导致不正确的结果。

原因

  1. 浮点数表示的精度问题
    浮点数在计算机中使用 IEEE 754 标准表示,这种表示法在精度上存在一定的限制。许多十进制数在二进制中无法精确表示,会导致舍入误差。

  2. 浮点运算的累积误差
    在进行多次浮点运算时,舍入误差会累积,导致最终结果与预期值存在微小的差异。

示例

直接比较浮点数:

#include <iostream>int main() {double a = 0.1;double b = 0.2;double c = a + b;if (c == 0.3) {std::cout << "c 等于 0.3" << std::endl;} else {std::cout << "c 不等于 0.3" << std::endl; // 这个分支将会被执行}return 0;
}

在这个例子中,c 的值实际上是 0.30000000000000004,而不是 0.3,所以直接比较会失败。

使用差值精度判断

为了避免直接比较的误差,应该使用一个小的差值(通常称为 epsilon)来判断两个浮点数是否“足够接近”。

#include <iostream>
#include <cmath>bool isAlmostEqual(double a, double b, double epsilon) {return std::fabs(a - b) < epsilon;
}int main() {double a = 0.1;double b = 0.2;double c = a + b;double epsilon = 1e-9; // 定义一个很小的差值if (isAlmostEqual(c, 0.3, epsilon)) {std::cout << "c 足够接近 0.3" << std::endl; // 这个分支将会被执行} else {std::cout << "c 不足够接近 0.3" << std::endl;}return 0;
}

在这个例子中,isAlmostEqual 函数通过比较 ab 之间的绝对差值是否小于 epsilon 来判断它们是否“足够接近”。这样可以有效避免浮点数比较中的精度问题。

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

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

相关文章

2024年6月13日随笔

现在已经是6月14日了&#xff0c;十二点多了&#xff0c;宿舍依旧很吵&#xff0c;根本睡不着&#xff0c;索性下来写篇随笔&#xff0c;已经好久没写过随笔了&#xff0c;最近这两个月都很忙&#xff0c;双学位的考试&#xff0c;两个课程设计&#xff0c;还有其他一些杂七杂八…

Docker使用心得

Docker使用心得 最近使用Docker比较频繁&#xff0c;特此想记录一下&#xff0c;方便后续查找。 Docker常用命令Docker如何配置使用GPU环境&#xff1f;如何使用Dockerfile构建镜像&#xff1f;如何使用docker compose 实例化容器&#xff1f; Docker如何配置使用GPU环境 参…

深度学习 - CNN

第一部分&#xff1a;基础知识 1. 什么是卷积神经网络&#xff08;CNN&#xff09; 定义和基本概念 卷积神经网络&#xff08;CNN&#xff09;是一种专门用于处理具有网格结构数据&#xff08;如图像&#xff09;的深度学习模型。它们在图像识别和计算机视觉领域表现尤为突出…

SX2106B 2A同步降压型DC/DC转换器芯片IC

一般描述 SX2106B是一款同步降压DC/DC转换器&#xff0c;提供宽广的4.5V至24V输入电压范围和2A连续负载电流能力。 SX2106B故障保护包括逐周期电流限制、UVLO、输出过电压保护和热关机。可调软启动功能&#xff0c;防止启动时的浪涌电流。该器件采用电流模式控…

R语言数据分析案例28-对数据集可视化和T检验

一、分析主题&#xff1a; 本分析旨在对数据集进行可视化和 T 检验&#xff0c;以探索数据集中的变量之间的关系和差异。通过可视化数据&#xff0c;我们可以直观地了解数据的分布和趋势&#xff0c;而 T 检验则可以帮助我们确定这些差异是否具有统计学意义。 二、具体分析 …

【字符函数】

接下来介绍部分字符函数测试 2. 字符转换函数 1.字符分类函数 1.1iscntrl 注&#xff1a;任何控制字符 检查是否有控制字符 符合为真 int main() {int i 0;char str[] "first line \n second line \n";//判断是否遇到控制字符while (!iscntrl(str[i])){p…

【Java】多态、final关键字、抽象类、抽象方法

多态(Polymorphism) 【1】多态跟属性无关&#xff0c;多态指的是方法的多态&#xff0c;而不是属性的多态。 【2】案例代入&#xff1a; public class Animal {//父类&#xff1a;动物&#xff1a; public void shout(){ System.out.println("我是小动物&am…

Qt 非圆角图片裁剪为圆角图片

将Qt非圆角图片裁剪为圆角图片,步骤如下&#xff1a; 1、按照原始图片尺寸定义一张透明的新图形 2、使用画家工具在新图形上绘制一个圆角矩形线路 3、绘制图片 4、使用圆角矩形切割图片边角 封装成函数如下&#xff1a; QPixmap Widget::getRoundedPixmap(const QPixmap srcPix…

Opus从入门到精通(四)Opus解码程序实现

Opus从入门到精通(四)Opus解码程序实现 前面我们已经成功将PCM文件编码成Opus,写入文件,接下来我们实现解码. 初始化解码器 解码器创建依赖于编码前数据的采样率,声道数: OpusDecoder *pOpusDec opus_decoder_create(sampleRateInHz, channelConfig, &error); if (err…

Vue引入element-plus-04

我们这次开发是使用vue的脚手架来进行开发,前面我们已经使用过最原生的方式去编写我们的vue的语法,从今天开始就使用vue的脚手架,但是前提是你需要用于node的环境 在我们开始之前&#xff0c;我们至少需要有node npm是什么&#xff1f; npm是一个强大的包管理工具&#xff0c;它…

LeetCode: 2779. 数组的最大美丽值

题目 给你一个下标从 0 开始的整数数组 nums 和一个 非负 整数 k 。 在一步操作中&#xff0c;你可以执行下述指令&#xff1a; 在范围 [0, nums.length - 1] 中选择一个 此前没有选过 的下标 i 。 将 nums[i] 替换为范围 [nums[i] - k, nums[i] k] 内的任一整数。 数组的 …

Halcon 多相机统一坐标系

小杨说事-基于Halcon的多相机坐标系统一原理个人理解_多相机标定统一坐标系-CSDN博客 一、概述 最近在搞多相机标定等的相关问题&#xff0c;对于很大的场景&#xff0c;单个相机的视野是不够的&#xff0c;就必须要统一到一个坐标系下&#xff0c;因此我也用了4个相机&#…

人工智能ChatGPT的多种应用:提示词工程

简介 ChatGPT 的主要优点之一是它能够理解和响应自然语言输入。在日常生活中&#xff0c;沟通本来就是很重要的一门课程&#xff0c;沟通的过程中表达的越清晰&#xff0c;给到的信息越多&#xff0c;那么沟通就越顺畅。 和 ChatGPT 沟通也是同样的道理&#xff0c;如果想要 …

推荐系统三十六式学习笔记:原理篇.矩阵分解10|那些在Netflix Prize中大放异彩的推荐算法

目录 缘起矩阵分解为什么要矩阵分解1 基础的SVD算法2 增加偏置信息3 增加历史行为4 考虑时间因素 总结 我们先前聊过推荐系统中的经典问题&#xff0c;其中有一类就是评分预测。平心而论&#xff0c;评分预测问题只是很典型&#xff0c;其实并不大众。毕竟在实际的应用中&#…

最新情侣飞行棋高阶羞羞版,解锁私密版情侣小游戏,文末有福利!

今天要跟大家聊聊一种特别有意思的游戏——情侣飞行棋羞羞版。别急着脸红&#xff0c;这可是专为情侣设计的游戏&#xff0c;让你们在轻松愉快的氛围中&#xff0c;增进了解&#xff0c;加深感情。 谈恋爱&#xff0c;不就是两个人在一起&#xff0c;做些有趣的事情吗&#xf…

java程序监控linux服务器硬件,cpu、mem、disk等

实现 使用Oshi和Hutool工具包1、pom依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.github.oshi</groupId>&l…

Opus从入门到精通(七)Opus编码基础之认识声音

Opus从入门到精通(七)Opus编码基础之认识声音 前面我们分析完Opus的编解码api使用,封装原理等,接下来我们准备分析Opus编码原理.Opus编码是一个复杂的工作,我们需要做一些基本铺垫,包括认识声音,压缩编码基础. 认识音频有助于我们了解音频特征,不仅对语音有助于我们理解编码技…

2021年9月电子学会青少年软件编程 中小学生Python编程等级考试三级真题解析(判断题)

2021年9月Python编程等级考试三级真题解析 判断题&#xff08;共10题&#xff0c;每题2分&#xff0c;共20分&#xff09; 26、readline()执行结果为字符串&#xff0c;readlines()执行结果为列表 答案&#xff1a;对 考点分析&#xff1a;考查文件读操作&#xff0c;readli…

【leetcode--同构字符串】

要求&#xff1a;判断两个字符串的形式是不是一致&#xff0c;即是不是AABC或者ABBBCC这种。 trick&#xff1a;使用set&#xff08;&#xff09;结合zip&#xff08;&#xff09;。 set&#xff08;&#xff09;用法&#xff1a;用于创建一个不包含重复元素的集合 zip&#…

环保绩效评级:ABCD四个等级,你的企业处于哪个水平?

在当下社会&#xff0c;环保问题越来越受到人们的关注和重视。企业作为经济活动的重要参与者&#xff0c;其环保绩效评级直接关系到环境保护的成效。朗观视觉将详细解析环保绩效评级的ABCD四等级&#xff0c;帮助读者了解不同等级的特点和评判标准&#xff0c;进而引导企业提高…