跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

C++ 算术操作符与数值运算基础

讲解 C++ 算术操作符的基础知识,涵盖加减乘除取模运算符的使用及注意事项。详细说明了整数除法与浮点除法的区别、负数取模的符号规则以及数值溢出问题。通过多个实际练习案例,演示了带余除法、时间转换、变量交换等常见编程场景的实现方法。

随缘发布于 2026/3/22更新于 2026/10/1794 浏览
C++ 算术操作符与数值运算基础

5.1 算术操作符

在写代码时,一定会涉及到计算。为了方便运算,提供了一系列操作符,其中有一组操作符叫:算术操作符。分别是:+ - * / %,这些操作符都是双目操作符。

注:操作符也被叫做:运算符,是不同的翻译,意思是一样的。

#include <iostream>
using namespace std;
int main(){
    int a = 7 + 2; // 加法运算
    int b = 7 - 2; // 减法运算
    int c = 7 * 2; // 乘法运算
    int d = 7 / 2; // 除法运算,得到的是整除后的商
    int e = 7 % 2; // 取余运算,得到的是整除后的余数
    cout << a << endl;
    cout << b << endl;
    cout << c << endl;
    cout << d << endl;
    cout << e << endl;
    return 0;
}

易错点: • / 除法的操作符,除数不能为 0,如果除数为 0,程序会崩溃的。 • % 取模操作符的计算结果是两个操作数进行除法运算后的余数。 • 取模操作符的操作数只能是整型,不能是浮点型,这个编译器会报语法错误的。

#include <iostream>
using namespace std;
int main(){
    int a = 10;
    int b = 0;
    int c = a / b;
    float d = 6.0;
    float e = d % 2;
    return 0;
}

5.2 浮点数的除法

#include <iostream>
using namespace std;
int main(){
    float x = 6 / 4;
    cout << x << endl; // 1
    float y = 6.0 / 4; // 6/4.0结果是一样的
    cout << y << endl; // 1.5
    return 0;
}

上面示例中,尽管变量 x 的类型是 float(浮点数),但是 6 / 4 得到的结果是 1.0,而不是 1.5。原因就在于整数除法是整除,只会返回整数部分,丢弃小数部分。

如果希望得到浮点数的结果,两个运算数必须至少有一个浮点数,这时就会进行浮点数除法。

5.3 负数取模

• 负数也是支持取模的,但是负数求模结果的正负号由第一个运算数(操作数)的正负号决定

#include <iostream>
using namespace std;
int main(){
    cout << 11 % -5 << endl; // 1
    cout << -11 % -5 << endl; // -1
    cout << -11 % 5 << endl; // -1
    return 0;
}

5.4 数值溢出

前面我们了解到数据类型都有对应的数值范围,而在实际运算过程中可能会存在加法操作导致数据范围超过当前数据类型规定的范围,如下:

#include <iostream>
using namespace std;
int main(){
    char a = 'Z';
    char b = a + 'Z';
    cout << b << endl; // 输出了不显示的内容
    // printf 是格式化输出,后面章节会讲,这里暂不做讲解
    printf("%d", b); // -76,char 的十进制内容
    return 0;
}

以 char 类型为例,char 的数值范围在 -128 ~ 127,当字符相加超过最大值后,打印出来的结果会变成负数,这与数据的存储有关

在这里插入图片描述

意识到数据类型的取值是有其范围的,那么我们在编程的时候就要选择合适的数据类型,才能得到正确的结果。正所谓:十年 IO 一场空,不开 long long 见祖宗。

5.5 练习

练习 1:计算 (a+b)*c

链接:https://www.luogu.com.cn/problem/B2008

#include <iostream>
using namespace std;
int a, b, c;
int main(){
    cin >> a >> b >> c;
    int r = (a + b) * c;
    cout << r << endl;
    return 0;
}

练习 2:带余除法

链接:https://www.luogu.com.cn/problem/B2010

#include <iostream>
using namespace std;
int a, b;
int main(){
    cin >> a >> b;
    cout << a / b << " " << a % b << endl;
}

练习 3:整数个位

链接:https://ac.nowcoder.com/acm/problem/21990

#include <iostream>
using namespace std;
int a;
int main(){
    cin >> a;
    cout << a % 10 << endl;
    return 0;
}

练习 4:整数十位

链接:https://ac.nowcoder.com/acm/problem/21991

#include <iostream>
using namespace std;
int a;
int main(){
    cin >> a;
    cout << a % 100 / 10 << endl;
    return 0;
}

练习 5:时间转换

链接:https://ac.nowcoder.com/acm/contest/18839/1031

#include <iostream>
using namespace std;
int time;
int main(){
    cin >> time;
    cout << time / 60 / 60 << " " << time / 60 % 60 << " " << time % 60 << endl;
    return 0;
}

解释:

  1. time 除以 60(1 分钟有 60 秒)先换算出分钟数,分钟数除以 60(1 小时有 60 分钟)交换算成小时。
  2. time 除以 60(1 分钟有 60 秒)先换算出分钟数,分钟数对 60 取模,就是换完小时后剩余的分钟数
  3. time 对 60 取模,每 60 秒凑 1 分钟,还剩多少多少秒,没办法凑够一分钟。

练习 6:小鱼的游泳时间

链接:https://www.luogu.com.cn/problem/P1425

#include <iostream>
using namespace std;
int main(){
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    int h, m;
    int t = c * 60 + d - a * 60 - b; // 计算机出时间差,单位是分钟
    h = t / 60;
    m = t % 60;
    cout << h << " " << m << endl;
    return 0;
}

6.1 连续赋值

赋值操作符也可以连续赋值,如:

int a = 3;
int b = 5;
int c = 0;
c = b = a + 3; // 连续赋值,从右向左依次赋值的。

虽然支持这种连续赋值,但是写出的代码不容易理解,建议还是拆开来写,这样方便观察代码的执行细节。

6.2 复合赋值符

在写代码时,我们经常可能对一个数进行自增、自减的操作,如下代码:

int a = 10;
a = a + 3;
a = a - 2;

这样代码 C++ 给提供了更加方便的写法:

int a = 10;
a += 3;
a -= 2;

C++ 中提供了复合赋值符,方便我们编写代码,这些赋值符有:

在这里插入图片描述

6.3 练习

练习:交换值

链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=2064

#include <iostream>
using namespace std;
int main(){
    int a = 0;
    int b = 0;
    cin >> a >> b;
    int c = a; // c 是一个临时变量,作为中间变量实现交换的
    a = b;
    b = c;
    cout << a << " " << b << endl;
    return 0;
}

目录

  1. 5.1 算术操作符
  2. 5.2 浮点数的除法
  3. 5.3 负数取模
  4. 5.4 数值溢出
  5. 5.5 练习
  6. 练习 1:计算 (a+b)*c
  7. 练习 2:带余除法
  8. 练习 3:整数个位
  9. 练习 4:整数十位
  10. 练习 5:时间转换
  11. 练习 6:小鱼的游泳时间
  12. 6.1 连续赋值
  13. 6.2 复合赋值符
  14. 6.3 练习
  15. 练习:交换值

更多推荐文章

查看全部
  • 从零开发 AR 演讲提词器:基于 Rokid CXR-M SDK 的实战指南
  • 基于 SpringBoot 的人脸识别课堂考勤系统
  • 论文AI率太高?八个方法教你30分钟降低AIGC,90%到2.4%亲测有效!
  • 智能家居插件管理工具技术指南:本地化网络优化方案
  • 基于 SD-PPP 的 AI 绘画工作流与 Photoshop 深度协作方案
  • Hunyuan-MT-7B-WEBUI 远程访问配置与安全策略
  • Flutter Web 混合开发:构建跨平台 Web 应用
  • 深度学习学习率原理与代码实例
  • 大模型算法岗常见面试题及核心技术解析
  • 豆包 AI API Key 获取及前端接入指南
  • HTML+CSS+JavaScript 前端三剑客基础知识体系
  • 前端基础知识详解:HTML CSS JavaScript
  • Python 代码重构优化的核心方法与实战技巧
  • 逆向工程实战:使用 DOM 断点追踪前端加密参数
  • OpenClaw 对接飞书机器人配置踩坑:消息不回与 Gateway 断开排查
  • FPGA 比特流深度解析
  • IROS 2025 精选论文:从通用机器人到真实世界部署
  • Pyglet:Python 游戏开发与图形界面库
  • Android 热门三方库源码分析与面试指南
  • 三维模型数据结构与存储方式解析

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online