当前位置: 首页 > web >正文

玩转 C++ 算术运算符(五十二)

1. 运算符一览(左结合律)

运算符功能语法
+一元正号 / 一元负号+expr / -expr
* / %乘 / 除 / 取余expr*expr / expr/expr / expr%expr
+ -加 / 减expr+expr / expr-expr
  1. 一元运算 (+x, -x)
  2. 乘除取余 (*, /, %)
  3. 加减法 (+, -)

注意:所有符号都满足左结合律,同级运算符从左往右结合。

2. 小整数如何“升级”?

在表达式求值前,C++ 总会把 boolcharshort小于 int 的类型 提升(integral promotion)到 intunsigned int

char  c = 100;
short s = 20000;
int   x = c + s;  // c 和 s 均提升为 int,然后相加

这样可以避免因字符或短整型太小带来的溢出风险。

3. 算术运算与指针

  • 指针 + / – 整数

    • p + n:指向原数组中第 n 个元素
    • p - n:向后移动 n 个元素
  • 指针 – 指针

    • p2 - p1:两指针之间的距离(元素个数)
int arr[5] = {0,1,2,3,4};
int* p = arr;           // 指向 arr[0]
int* q = p + 3;         // 指向 arr[3]
std::ptrdiff_t d = q-p; // d == 3

指针运算符优先级与常规算术相同,都高于加减。

4. 取余 % 的那些坑

  • 只作用于整数
  • 符号与被除数相同,商向 0 舍入(C++11 起)
21 %  6 == 3
21 % -8 ==  5   // 符号同被除数 21
-21 % 8 == -5   // 符号同被除数 -21

保证 a == (a/b)*b + a%b 恒成立。

5. 浮点、混合类型运算

  • 除法 /
    • 整数 ÷ 整数 → 整数(舍弃小数部分)
    • 只要一个操作数是浮点,就按浮点来算
int   i = 7 / 2;   // i == 3
double d = 7.0/2;  // d == 3.5
d = 7 / 2.0;       // d == 3.5
  • 小心混合布尔运算
    bool → 提升为 int(0/1),再参与算术。

6. 小结与准则

  1. 牢记优先级:先乘除,后加减;一元运算最高。
  2. 利用括号:让意图一目了然,避免歧义。
  3. 留心类型提升char/short/bool → int;混合算术遵循“大”类型。
  4. 指针算术p + n 移动 n 个元素;p2 - p1 为元素距离。
  5. 不要对同一对象“又读又写” 在一个表达式里,否则顺序不定,行为未定义!

掌握这些,你的 C++ 算术运算将更严谨、更安全、更清晰。下次写 a + b * c / d - e % f 时,不妨默念一遍“大乘小加再括号”,BUG 自会少许多。欢迎点赞、评论交流你在运算符使用中的心得!

http://www.xdnf.cn/news/1701.html

相关文章:

  • 拼团退款中采用分片处理降低对数据库
  • 关于Spring Boot构建项目的相关知识
  • Mysql的深度分页查询优化
  • 2194出差-节点开销Bellman-ford/图论
  • rk3588 驱动开发(三)第五章 新字符设备驱动实验
  • Android PackageManagerService(PMS)框架深度解析
  • 【4.23号更新,docker可用镜像源】2025最新 Docker 国内可用镜像源仓库地址
  • Linux 服务器运维常用命令大全
  • 性行为同意协议系统网站源码
  • JavaWeb:HtmlCss
  • 无锡SAP实施专家——哲讯智能科技助力企业数字化转型
  • 针对 Spring Boot 应用中常见的查询场景 (例如:分页查询、关联查询、聚合查询) 如何进行 SQL 优化?
  • C++区别于C语言的提升用法(万字总结)
  • 形象解释 HTTP 的四种常见请求方式及其中的区别联系
  • 二叉树进阶的解题思路
  • PostgreSQL-日志管理介绍
  • 如何将极狐GitLab 议题导出为 CSV?
  • 2025顶会:CNN+LSTM+Attention多热点搭配
  • 爬虫学习——使用HTTP服务代理、redis使用、通过Scrapy实现分布式爬取
  • MySQL SQL查询语句执行过程
  • QLExpress 深度解析:构建动态规则引擎的利器
  • 云蝠智能大模型呼叫:AI驱动的通信服务革新与实践
  • 格式工厂:多媒体转换工具
  • Red:1靶场环境部署及其渗透测试笔记(Vulnhub )
  • 路由交换网络专题 | 第七章 | BGP练习 | 次优路径 | Route-Policy | BGP认证
  • 本地缓存大杀器-Caffeine
  • HTML响应式网页设计与跨平台适配
  • vue element使用el-table时,切换tab,table表格列项发生错位问题
  • 驱动开发硬核特训 · Day 19:从字符设备出发,掌握 Linux 驱动的实战路径(含 gpio-leds 控制示例)
  • 成人高考难吗-录取线仅需120分?