乐趣区

关于c++:C-入门教程三-运算符

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

三元操作符(向左)

赋值操作符(向左)

逗号操作符(向左)

退出移动版