【C++基础】第二十一课:算术运算符

算术运算符

Posted by x-jeff on December 15, 2020

【C++基础】系列博客为参考《C++ Primer中文版(第5版)》C++11标准)一书,自己所做的读书笔记。
本文为原创文章,未经本人允许,禁止转载。转载请注明出处。

1.算术运算符

上表按照运算符的优先级将其分组。一元运算符的优先级最高,接下来是乘法和除法,优先级最低的是加法和减法。上面的所有运算符都满足左结合律,意味着当优先级相同时按照从左向右的顺序进行结合。

算术运算符的运算对象和求值结果都是右值

一元正号运算符、加法运算符和减法运算符都能作用于指针。

1
2
bool b = true;
bool b2 = -b;//b2是true!

⚠️我们指出布尔值不应该参与运算,-b就是一个很好的例子。对大多数运算符来说,布尔类型的运算对象将被提升为int类型。如上所示,布尔变量b的值为真,参与运算时将被提升成整数值1,对它求负后的结果是-1。将-1再转换回布尔值并将其作为b2的初始值,显然这个初始值不等于0,转换成布尔值后应该为1。所以,b2的值是真!

‼️算术表达式有可能产生未定义的结果。一部分原因是数学性质本身:例如除数是0的情况;另外一部分则源于计算机的特点:例如溢出,当计算的结果超出该类型所能表示的范围时就会产生溢出。很多系统在编译和运行时都不报溢出错误,像其他未定义的行为一样,溢出的结果是不可预知的。

运算符%俗称“取余”或“取模”运算符,负责计算两个整数相除所得的余数,参与取余运算的运算对象必须是整数类型

1
2
3
4
int ival = 42;
double dval = 3.14;
ival % 12;//正确:结果是6
ival % dval;//错误:运算对象是浮点类型