4.2 算术运算符
4.2 算术运算符
上图中按照运算符的优先级将其分组。一元运算符的优先级最高,接下来是乘法和除法,优先级最低的是加法和减法。
上述所有运算符都满足做左结合律,意味着当优先级相同时按照从左向右的顺序进行组合。
算术运算符能作用于任意算术类型以及任意能转换为算术类型的类型。
算术运算符的运算对象和求值结果都是右值。
一元运算符作用域一个指针或者算术值时,返回运算对象值的一个(提升后)的副本。
int i = 1024;
int k = -i; // k = -1024
bool b = true;
bool b2 = -b; // b2 = true,布尔类型被提升为 int
运算符%
俗称“取余”或“取模”运算符,负责计算两个整数相除所得的余数,参与取余运算的运算对象必须是整数类型。
在除法运算中,如果两个运算对象的符号相同则商为正,否则商为负。商一律向 0 取整(直接切除小数部分)。
根据取余运算的定义,如果m
和n
是整数且n
非 0,则表达式(m/n)*n+m%n
的求值结果与m
相等。隐含的意思就是,如果m%n
等于 0,则它的符号和m
相同。除了-m
导致溢出的特殊情况,其他时候(-m)/n
和m/(-n)
都等于-(m/n)
,m%(-n)
等于m%n
,(-m)%n
等于-(m%n)
,具体示例如下:
21 % 6; // 结果是 3 21 / 6; // 结果是 3
21 % 7; // 结果是 0 21 / 7; // 结果是 3
-21 % -8; // 结果是 -5 -21 / -8; // 结果是 2
21 % -5; // 结果是 1 21 / -5; // 结果是 -4