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*/
相关推荐
蠢蠢的打码几秒前
8584 循环队列的基本操作
数据结构·c++·算法·链表·图论
不是编程家7 分钟前
C++ 第三讲:内存管理
java·开发语言·c++
hakesashou9 分钟前
python怎么写csv文件
开发语言·python
欧阳枫落14 分钟前
pip 换源
开发语言·python·pip
jianglq17 分钟前
C++高性能线性代数库Armadillo入门
c++·线性代数
学步_技术1 小时前
Python编码系列—Python组合模式:构建灵活的对象组合
开发语言·python·组合模式
o独酌o1 小时前
递归的‘浅’理解
java·开发语言
Book_熬夜!1 小时前
Python基础(六)——PyEcharts数据可视化初级版
开发语言·python·信息可视化·echarts·数据可视化
waterHBO2 小时前
R语言 基础笔记
开发语言·笔记·r语言
m0_631270402 小时前
高级c语言(五)
c语言·开发语言