讲师中心 微信公众号
AI工具推荐 视频效率加速

C++运算符分类 算术关系逻辑运算说明

阿杰酱_6071

阿杰酱_6071

发布时间:2025-08-27 13:53:01

|

1024人浏览过

|

来源于php中文网

原创

C++中核心运算符分为算术、关系和逻辑三类。算术运算符执行数学计算,需注意整数除法截断和负数取模规则;关系运算符比较数值并返回布尔结果,应避免赋值与比较混淆及浮点数直接相等判断;逻辑运算符支持短路求值,提升性能与安全性,常用于条件组合与防御性编程。掌握这三类运算符是编写正确、高效C++程序的基础。

c++运算符分类 算术关系逻辑运算说明

C++中的运算符,就像我们处理数据和逻辑的各种工具,它们是语言的基石。简单来说,C++运算符可以根据它们的功能被归为几大类,其中最核心、最常用也最基础的,就是算术运算符、关系运算符和逻辑运算符。它们各自承担着数值计算、条件判断以及复杂逻辑组合的任务,是编写任何C++程序都离不开的“三大件”。

解决方案

在C++编程中,理解并熟练运用算术、关系和逻辑运算符至关重要。它们构成了程序执行流程和数据处理的基础。

算术运算符: 这类运算符主要用于执行数学计算。它们包括:

  • +
    (加法):两个操作数相加。
  • -
    (减法):从第一个操作数中减去第二个操作数。
  • *
    (乘法):两个操作数相乘。
  • /
    (除法):第一个操作数除以第二个操作数。需要注意的是,如果两个操作数都是整数,结果也会是整数(截断小数部分)。
  • %
    (取模/求余):返回两个整数相除的余数。这个操作符只能用于整数类型。

举个例子,

int a = 10; int b = 3; int sum = a + b; // sum is 13; int product = a * b; // product is 30; int quotient = a / b; // quotient is 3 (不是3.33); int remainder = a % b; // remainder is 1;

关系运算符: 关系运算符用于比较两个操作数,并返回一个布尔值(

true
或
false
),表示比较结果是否成立。

  • ==
    (等于):检查两个操作数是否相等。
  • !=
    (不等于):检查两个操作数是否不相等。
  • >
    (大于):检查第一个操作数是否大于第二个操作数。
  • <
    (小于):检查第一个操作数是否小于第二个操作数。
  • >=
    (大于或等于):检查第一个操作数是否大于或等于第二个操作数。
  • <=
    (小于或等于):检查第一个操作数是否小于或等于第二个操作数。

比如,

int x = 5; int y = 8; bool isEqual = (x == y); // isEqual is false; bool isGreater = (y > x); // isGreater is true;

立即学习“C++免费学习笔记(深入)”;

逻辑运算符: 逻辑运算符用于组合或修改布尔表达式。它们也返回一个布尔值。

  • &&
    (逻辑与):如果两个操作数都为
    true
    ,则结果为
    true
    。
  • ||
    (逻辑或):如果两个操作数中至少有一个为
    true
    ,则结果为
    true
    。
  • !
    (逻辑非):反转操作数的布尔值。如果操作数为
    true
    ,则结果为
    false
    ;反之亦然。

来看个实际场景,

bool condition1 = true; bool condition2 = false; bool resultAnd = (condition1 && condition2); // resultAnd is false; bool resultOr = (condition1 || condition2); // resultOr is true; bool resultNot = (!condition1); // resultNot is false;

这三类运算符共同构成了C++程序中数据处理和决策制定的核心机制,掌握它们是编写任何有意义代码的第一步。

C++中算术运算符有哪些常见陷阱和效率考量?

在我看来,算术运算符虽然直观,但藏着不少“坑”,尤其是对于初学者。最典型的就是整数除法截断。当你用两个整数进行除法运算时,C++不会给你浮点数结果,而是直接砍掉小数部分。比如

7 / 3
结果是
2
,而不是
2.333...
。这在很多需要精确计算的场景下,一不留神就会导致逻辑错误。如果需要浮点结果,至少有一个操作数得是浮点类型,比如
7.0 / 3
或者
static_cast<double>(7) / 3
。

另一个让我常常需要留意的点是取模运算符(

%
)与负数。C++标准在C++11之前对负数取模的结果是实现定义的,也就是说不同的编译器可能给出不同的结果。但从C++11开始,标准规定了如果
a / b
是
q
,
a % b
的结果就是
a - q * b
,且其符号与
a
相同。比如
-7 % 3
结果是
-1
。这对于跨平台或需要特定行为的场景,理解这一点非常重要。

C++ Code Review Master
C++ Code Review Master

组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。

下载

至于效率考量,多数情况下,现代编译器对基本的算术运算都有很好的优化,你不太需要担心

+
比
*
慢多少。但如果你在紧密的循环中进行大量浮点运算,或者涉及到大整数运算(需要特殊库),那性能差异就会凸显出来。浮点运算通常比整数运算慢,而某些复杂的数学函数(如
sin
,
cos
,
sqrt
)更是计算密集型。不过,对于日常编程,我们更应该关注代码的清晰度和正确性,而不是过早地优化这些微小的算术操作。有时,避免不必要的计算本身就是一种效率优化,比如在循环条件中避免重复计算常量表达式。

如何避免关系运算符在使用时常犯的逻辑错误?

关系运算符的逻辑错误,说白了,很多时候就是我们“想当然”或者“粗心大意”造成的。最经典也最致命的,莫过于把赋值运算符

=
错写成比较运算符
==
。在
if (a = b)
这样的语句中,C++会先执行赋值操作,然后将
a
的值(也就是
b
的值)转换为布尔类型作为
if
的判断条件。如果
b
是非零值,这个条件就永远为真,导致意想不到的程序行为。我个人习惯在比较常量时,把常量放在左边,比如
if (5 == myValue)
,这样即便误写成
5 = myValue
,编译器也会报错,因为你不能给常量赋值。

再来就是浮点数比较的问题。由于浮点数在计算机内部的存储方式,它们通常不是精确的。直接使用

==
来比较两个浮点数是否相等几乎总是错误的。比如
0.1 + 0.2 == 0.3
往往会返回
false
。正确的做法是比较它们的差的绝对值是否在一个非常小的阈值(epsilon)之内,例如
if (fabs(a - b) < epsilon)
。这是一种很常见的处理方式,虽然多写一行代码,但能避免很多头疼的bug。

此外,字符串比较也是一个容易出错的地方。在C++中,如果你直接用

==
比较两个
char*
类型的字符串(C风格字符串),你比较的不是字符串内容,而是它们在内存中的地址。要比较字符串内容,你需要使用
strcmp
函数(来自
<cstring>
)或者,更现代、更安全的做法是使用
std::string
对象,它们重载了
==
运算符,可以直接比较内容。这两种方式的混淆,我见过不少次,每次都得花点时间去提醒。

C++逻辑运算符的短路求值特性如何影响程序性能和安全性?

逻辑运算符的短路求值(Short-circuit evaluation)特性,在我看来,是C++设计中一个非常巧妙且实用的机制,它对程序的性能和安全性都有着直接而深远的影响。

简单来说,对于逻辑与

&&
运算符,如果第一个操作数为
false
,那么整个表达式的结果就已经确定为
false
,C++就不会去评估第二个操作数了。同理,对于逻辑或
||
运算符,如果第一个操作数为
true
,整个表达式的结果就已经确定为
true
,第二个操作数也不会被评估。

从性能角度看,短路求值意味着可以避免不必要的计算。想象一下,你有一个条件判断

if (expensive_check() && another_check())
,如果
expensive_check()
返回
false
,那么
another_check()
函数就根本不会被调用,这无疑节省了计算资源。尤其是在循环中,这种优化效果会非常显著。

但它更大的价值体现在安全性上。短路求值是我们在C++中进行防御性编程的利器。最常见的场景就是避免空指针解引用。例如,

if (ptr != nullptr && ptr->isValid())
。如果
ptr
是一个空指针,
ptr != nullptr
会返回
false
,此时
&&
运算符就会短路,
ptr->isValid()
这一行代码根本不会执行,从而避免了程序崩溃。如果没有短路求值,即使
ptr
为空,程序也会尝试去访问
ptr->isValid()
,导致未定义行为甚至崩溃。

我个人在编写涉及复杂条件判断的代码时,总是会刻意利用短路求值来组织表达式的顺序:把那些开销小、失败可能性高的条件放在前面,把可能导致运行时错误(如空指针解引用、数组越界)的条件放在更安全的检查之后。这不仅让代码更健壮,也让阅读者能更快地理解条件的优先级和意图。这是一种非常重要的编程习惯,远比那些细枝末节的性能优化来得实在。

热门AI工具

更多
SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5299

2023.08.02

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5804

2023.10.24

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5804

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2404

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

1612

2025.10.17

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1558

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2264

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5804

2023.10.24

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

120

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
计算机系统从应用层到底层
计算机系统从应用层到底层

共6课时 | 0.6万人学习

php初学者入门课程
php初学者入门课程

共10课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn