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*/
相关推荐
老秦包你会7 小时前
C++进阶------C++的类型转换
java·开发语言·c++
星辰烈龙7 小时前
黑马程序员JavaSE基础加强d2
java·开发语言
superman超哥7 小时前
仓颉性能瓶颈定位方法深度解析
c语言·开发语言·c++·python·仓颉
是苏浙7 小时前
零基础入门Java之认识String类
java·开发语言
leaves falling7 小时前
c语言-static和extern
c语言·开发语言
武汉唯众智创7 小时前
“物联网 Python 开发教程”课程教学解决方案
开发语言·python·物联网·物联网技术·物联网 python 开发·python 开发
时光Autistic7 小时前
【搭建教程】腾讯混元3D模型部署
开发语言·python·3d·github
于樱花森上飞舞7 小时前
【多线程】常见的锁策略与锁
java·开发语言·算法·java-ee
黎雁·泠崖7 小时前
C 语言的内存函数:memcpy/memmove/memset/memcmp 精讲(含模拟实现)
c语言·开发语言
aini_lovee7 小时前
基于C# 和 NModbus 库的 Modbus TCP 通信示例源码
开发语言·tcp/ip·c#