C++ Primer:4.2 算术运算符

其他章节:C++ Primer

算术运算符(左结合律)

运算符 功能 用法
+ 一元正号 + expr
- 一元负号 - expr
* 乘法 expr * expr
/ 除法 expr / expr
% 求余 expr % expr
+ 加法 expr + expr
- 减法 expr - expr

一元运算符的优先级最高,接下来是乘法和除法,优先级最低的是加法和减法。

  • 优先级高的运算符比优先级低的运算符组合地更紧密。
  • 上述所有的运算符都满足左结合律,当优先级相同时按照从左到右的顺序进行组合。
  • 算术运算符都能作用于任意算术类型以及任意能转换为算术类型的类型。算术运算符的运算对象和求值结果都是右值。

一元正号运算符、加法运算符和减法运算符都能作用于指针。

  • 一元正号运算符作用于一个指针或者算术值时,返回运算对象值的一个(提升后的)副本;一元负号运算符对运算对象值取负后,返回其(提升后的)副本。
cpp 复制代码
int i = 1024;
int k = -i;    // k是-1024
bool b = true;
bool b2 = -b;  // b2是true!
// b参与运算时提升为数值1,求负结果为-1,不等于0,bool为真

算术表达式有可能产生未定义的结果。一部分原因是数学性质本身:例如除数是0的情况;另外一部分则源于计算机的特点:例如溢出,当计算的结果超出该类型所能表示的范围时就会产生溢出。


/:除法运算符,整数相除的结果还是整数,如果商还有小数,直接弃除。
%:取余或取模运算符,负责计算两个整数相除所得的余数,参于取余运算的运算对象必须是整数类型。


除法运算中,如果两个运算对象的符号相同则商为正,否则商为负。

根据取余运算的定义,如果mn是整数且n0,则表达式(m/n)*n+m%n的求值结果与m相等。

除了-m导致溢出的特殊情况,其他时候(-m)/nm/(-n)都等于-(m/n)m%(-n)等于m%n(-m)%n等于-(m%n)

cpp 复制代码
21 % 6;  /*结果是3*/     21 / 6; /*结果是3*/
21 % 7;  /*结果是0*/     21 / 7; /*结果是3*/
-21 % -8; /*结果是-5*/   -21 / -8; /*结果是2*/
21 % -5; /*结果是1 */    21 / -5;  /*结果是-4*/
相关推荐
有点。36 分钟前
C++ ⼀级 2024 年 03 ⽉
c++
酒尘&38 分钟前
JS数组不止Array!索引集合类全面解析
开发语言·前端·javascript·学习·js
冬夜戏雪1 小时前
【java学习日记】【2025.12.7】【7/60】
java·开发语言·学习
xwill*1 小时前
分词器(Tokenizer)-sentencepiece(把训练语料中的字符自动组合成一个最优的子词(subword)集合。)
开发语言·pytorch·python
CC.GG1 小时前
【C++】二叉搜索树
java·c++·redis
咖啡の猫1 小时前
Python列表的查询操作
开发语言·python
Savior`L2 小时前
二分算法及常见用法
数据结构·c++·算法
深海潜水员2 小时前
OpenGL 学习笔记 第一章:绘制一个窗口
c++·笔记·学习·图形渲染·opengl
quikai19812 小时前
python练习第三组
开发语言·python
JIngJaneIL2 小时前
基于Java非遗传承文化管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot