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 赋值运算符

作用:把右边的值赋给左边

= 赋值运算

+=, -=, *=, /= 加等于,建等于,乘等于,除等于:这些符号一种简化,表示将左边对右做运算后将结果赋给左边。

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 三元赋值逗号(向左)

三元操作符(向左)

赋值操作符(向左)

逗号操作符(向左)

你可能感兴趣的:(c++)