文章目录
算术运算符(左结合律)
运算符 | 功能 |
---|---|
+ | 一元正号 |
- | 一元负号 |
– | – |
* | 乘法 |
/ | 除法 |
% | 求余 |
– | – |
+ | 加法 |
- | 减法 |
按照运算符的优先级进行分组,一元运算符的优先级最高,其次是乘除求余,然后最后是加减法,优先符高的会比优先符低的组合来的更紧密,上面所有的运算都满足左结合律,意味着当优先级相同的同时按照从左到右的顺序进行组合。
除非另做特殊说明,算术运算符都可以作用在任意算数类型以及任意能转换为算术类型的剋行,算术类型的运算对象和求值结果都是右值。而这里如果存在小数的话,小数将会先提升成较大的整数类型,所有的运算对象最终都会转化为同一类型。
一元正好运算符、加法运算符、减法运算符都可以使用于指针。当一元正号运算符作用与一个指针或者算术值的时候,返回运算值的一个(提升后的)副本。
相同的我们举个例子进行理解,一元负号运算符对运算对象取负后,返回其(提升后)的副本:
int i=1024;
int k=-i;//1
bool b = true;
bool b2=-b;//2
- k很明显是1024.
- b2却不是想当然的0,因为在这个运算中,b先被提升到int,然后取负号-1,然后赋值给bool 的b2,但是对于bool值来说,非0(false)就是1(true).
这里提一嘴就是提升完后运算的值如果超出所赋值的对象的范围,则将会进行截取。
PS:算术表达式有可能产生未定义的结果(也就是取决于编译器的优化的项,或者类比于cout<<i<<" "<<++i;)。一部分原因是数学性质本身:例如除数是0的情况;另外一部分是源于计算机的特点:例如溢出。
然后这里提一些比较可能被人忽略的概念:
- 整数相除还是整数,即如果算出的数有小数部分,直接舍弃。
- %取余运算符,负责计算两个整数相除的余数,参与取余的运算对象必须是整数类型且非0
- 对于除法运算中,在新的C++11标准内,所采取的是向0取整,比如一个数算出来是0.1即成整数为0,若有一个数为-1.1则算出来的数为-1.