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*/
相关推荐
你怎么知道我是队长3 小时前
C语言---头文件
c语言·开发语言
期待のcode3 小时前
Java虚拟机的运行模式
java·开发语言·jvm
hqwest3 小时前
码上通QT实战25--报警页面01-报警布局设计
开发语言·qt·qwidget·ui设计·qt布局控件
a程序小傲3 小时前
京东Java面试被问:动态规划的状态压缩和优化技巧
java·开发语言·mysql·算法·adb·postgresql·深度优先
HellowAmy3 小时前
我的C++规范 - 玩一个小游戏
开发语言·c++·代码规范
自学不成才3 小时前
深度复盘:一次flutter应用基于内存取证的黑盒加密破解实录并完善算法推理助手
c++·python·算法·数据挖掘
徐先生 @_@|||4 小时前
Palantir Foundry 五层架构模型详解
开发语言·python·深度学习·算法·机器学习·架构
tang777895 小时前
爬虫如何绕过绕过“5秒盾”Cloudflare:从浏览器指纹模拟到Rust求解之不完全指南
开发语言·爬虫·rust·cloudflare
Yuer20255 小时前
什么是 Rust 语境下的“量化算子”——一个工程对象的最小定义
开发语言·后端·rust·edca os·可控ai
hqwest5 小时前
码上通QT实战26--系统设置01-系统设置布局
开发语言·qt·qss·qt基础控件·qt布局控件·qt表格控件