C++| C++ 入门教程(三) 运算符

3 运算符 作用:用于执行代码的运算
3.1 算术运算符
作用:用于处理加减乘除
+ - * / 加减乘除
/ 除法:两个整数相除的时候,结果依然是整数,小数部分将会被去除
% 取模(又称取余):只能是两个整数取余
++ 递增 --递减:让变量自加1,或自减1
前置递增(递减):递增(递减)运算符放变量前面,会先增后算。相反则会先算后增。

int main(){ using namespace std; //前置运算,最后会得到a=3, b=3 int a=2; int b=++a; cout<

3.2 赋值运算符
作用:把右边的值赋给左边
= 赋值运算
【C++| C++ 入门教程(三) 运算符】+=, -=, *=, /= 加等于,建等于,乘等于,除等于:这些符号一种简化,表示将左边对右做运算后将结果赋给左边。
3.3 比较运算符
作用:用于表达式的比较,并返回一个布尔值。
== 等于
!= 不等于
< 小于
\> 大于
<= 小于等于
\>= 大于等于
3.4 逻辑运算符
作用:对值进行逻辑处理
! 逻辑非运算
&& 逻辑与运算
|| 逻辑或运算
3.5 操作符优先级小结(补充)
3.5.1 优先级1(优先级由高到低)从左到右结合 最高优先级:括号 () 所有优先级都可以被括号打破
访问操作符:数组下标访问[],指针成员访问->,对象成员访问.,对象作用域访问::
后置自增自减运算符:++--
需要注意的是,访问操作符的优先级是非常高的。如果解析运算符*和访问运算符放在变量的两侧,编译器会先进行的是访问运算符。就如下例子:
#include using namespace std; class Person { public: int years; Person(int y) { years = y; } }; int main() { Person* p = new Person(20); cout << *p.years; delete p; return 0; }

请注意第13行cout << *p.years; ,因为p是一个指向Person对象的指针,它并不会先和解析运算符结合后再结合访问运算符orz而会先结合右边的访问运算符。但是对象指针不应该用.来访问成员,因此编译器会报错。
错误(活动) E0153 表达式必须具有类类型,但它具有类型 "Person *"
错误 C2228 “.years”的左边必须有类/结构/联合
对于这个错误,修改一下优先级就好了。用括号让p先和左边结合。
#include using namespace std; class Person { public: int years; Person(int y) { years = y; } }; int main() { Person* p = new Person(20); cout << (*p).years; delete p; return 0; }

(当然你也可以直接使用->,但是我不想哈哈哈哈)
3.5.2 一元向左结合操作符 逻辑非! 按位取反~ 前置递增++ 前置递减-- 取负- 取正+ 解析* 取地址& 强制类型转换(type)
3.5.3 双元算术比较位运算符(向右) 乘除取模
加减
按位移
比较
按位与或
逻辑与或
3.5.4 三元赋值逗号(向左) 三元操作符(向左)
赋值操作符(向左)
逗号操作符(向左)

    推荐阅读