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的情况;另外一部分则源于计算机的特点:例如溢出,当计算的结果超出该类型所能表示的范围时就会产生溢出。


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


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

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

除了-m导致溢出的特殊情况,其他时候(-m)/n和m/(-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*/
相关推荐
Wang's Blog8 小时前
Java 项目实战: 交友项目 - FastDFS:入门案例
java·开发语言·交友
apcipot_rain8 小时前
C++转Java日记(03)
java·开发语言·c++
布莱克6059 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
xys_6789 小时前
深挖C++:类和对象(中)
开发语言·c++
灿飞屋9 小时前
Rust 编程其实很简单
开发语言·rust
MOONICK11 小时前
QT元数据
开发语言·qt
D e re k ZH11 小时前
C++ 系统学习手记:从语法细节到工程实践
开发语言·数据结构·c++·算法
灿飞屋12 小时前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
xiaoye-duck12 小时前
《C++ 项目:手写大模型接入 SDK》Ollama接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
zaizai100713 小时前
【Effective Modern C++】学习第一章
c++