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 *"对于这个错误,修改一下优先级就好了。用括号让p先和左边结合。
错误 C2228 “.years”的左边必须有类/结构/联合
#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 三元赋值逗号(向左) 三元操作符(向左)
赋值操作符(向左)
逗号操作符(向左)
推荐阅读
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 2018-02-06第三天|2018-02-06第三天 不能再了,反思到位就差改变
- 第三节|第三节 快乐和幸福(12)
- android第三方框架(五)ButterKnife
- 遇到一哭二闹三打滚的孩子,怎么办┃山伯教育
- 三十年后的广场舞大爷
- 一百二十三夜,请嫁给我
- 2018年9月5日,星期三,天气晴
- 即将到手三百万