3 运算符
作用:用于执行代码的运算
3.1 算术运算符
作用:用于解决加减乘除
+ – * / 加减乘除
/ 除法:两个整数相除的时候,后果仍然是整数,小数局部将会被去除
% 取模(又称取余):只能是两个整数取余
++ 递增 – 递加:让变量自加 1,或自减 1
前置递增(递加):递增(递加)运算符放变量后面,会先增后算。相同则会先算后增。
int main(){
using namespace std;
// 前置运算,最初会失去 a =3, b=3
int a=2;
int b=++a;
cout<<b<<endl;
// 后置运算,最初会失去 a =3, b=2
int c=2;
int d=c++;
cout<<d<<endl;
return 0;
}
3.2 赋值运算符
作用:把左边的值赋给右边
= 赋值运算
+=, -=, *=, /= 加等于,建等于,乘等于,除等于:这些符号一种简化,示意将右边对右做运算后将后果赋给右边。
3.3 比拟运算符
作用:用于表达式的比拟,并返回一个布尔值。
== 等于
!= 不等于
< 小于
\> 大于
<= 小于等于
\>= 大于等于
3.4 逻辑运算符
作用:对值进行逻辑解决
! 逻辑非运算
&& 逻辑与运算
|| 逻辑或运算
3.5 操作符优先级小结(补充)
3.5.1 优先级 1(优先级由高到低)从左到右联合
最高优先级:括号 ()
所有优先级都能够被括号突破
拜访操作符:数组下标拜访[]
,指针成员拜访->
,对象成员拜访.
,对象作用域拜访::
后置自增自减运算符:++
,--
须要留神的是,拜访操作符的优先级是十分高的。如果解析运算符 *
和拜访运算符放在变量的两侧,编译器会先进行的是拜访运算符。就如下例子:
#include<iostream>
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<iostream>
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 三元赋值逗号(向左)
三元操作符(向左)
赋值操作符(向左)
逗号操作符(向左)