运算符与优先级
优先级
1.括号优先级最高
2.算术运算符优先级高于关系运算符
3.逗号运算符优先最低
!>算术运算符>关系运算符>&&>||>赋值运算符
算数运算符——从左至右
赋值运算符——从右至左
优先级 | 操作符 | |||
---|---|---|---|---|
1 | () | [] | -> | . |
:: | ||||
! | ~ | ++ | -- | |
2 | - (负号) | * (取内容) | ||
& (取首地址) | sizeof | |||
3 | ->* | .* | ||
4 | * (乘) | / | % | |
5 | + | - | ||
6 | << | >> | ||
7 | < | <= | > | >= |
8 | == | != | ||
9 | & (按位与) | |||
10 | ^ | |||
11 | | | |||
12 | && | |||
13 | || | |||
14 | ? : | |||
15 | = | += | -= | etc. |
16 | , |
运算符
一算术运算符
加减乘除求余数+-*/%
int n=7/2
printf("%d",n)
//输出为3,因为是整型,把小数舍弃掉了
float n=7/2===>还是为3
而float n=7/2.0===>结果为3.5
二关系运算符
大于 >
小与 <
等于 ==
不等于 !=
大于等于 >=
小于等于 <=
运算规则:从左到右依次比较,比较完一个运算符后,返回一个bool值,返回的bool值继续参与下一次比较
不允许使用连续的判断
三逻辑运算符
与:&& 二者都为真才是真的
或:|| 有一个真就为真
非:! !表达式——改变真假
注意
int a = 1, b = 2, c = 3;
bool is = (a > b) && (c = 6);
前面为假,不在执行后面,所以c还是等于3
cout << "a=" << a<<endl
<< "b=" << b<<endl
<< "c=" << c << endl;
输出的c=3
a = 1, b = 2, c = 3;
is = (a > b) || (c = 6);
前面为假,可执行后面,所以c为6
cout << "a=" << a << endl
<< "b=" << b << endl
<< "c=" << c << endl;
输出的c=6
1.对于&&需要前后表达式都为真,整个逻辑表达式才为真,当前面的表达式为假,不在执行后半部分
2.对于||需要前后表达式都为假,整个逻辑表达式才为假,当前半部分已经为真,不在执行后半部分
四赋值运算符(双目运算符)
int a;
a = 10;
bool b;
b = a = 0;
cout << "b=" << b << endl;
从右到左赋值
五自增自减运算符(单目运算符)
前置后置的区别
a++===》先操作,再执行a=a+1
++a===》先执行a=a+1,再操作
a++不能做左值,a++是一个常量,++a是一个变量
后置优先级比前置优先级高
六条件运算符(三目运算符)
写法:
(表达式1)?(表达式2):(表达式3)
规则:
先执行表达式1,如果表达式1位真,就执行表达式2,为假就执行表达式3
七逗号表达式
写法:
int n;
n=((表达式1),(表达式2),......,(表达式n));
最后n=表达式n的值
运算规则:
从左到右,依次计算,取最后一个表达式的值(表达式的个数不受限制)
int a = 1, b = 2, c = 3;
int n;
n = ((++a), (a++), (a = 10), (c = a), (b = 80), a);
cout << "a=" << a << endl ; //a=10
cout << "b=" << b << endl ; //b=80
cout << "c=" << c << endl ; //c=10
cout << "n=" << n << endl ; //n=10
八括号运算符
()[]
括号括起来的先算,有多个括号,从左到右算
九位操作运算符
按位与 &
按位或 |
按位非 ~
按位异或 ^
左移 <<
右移 >>
十其他运算符
箭头 ->
点 .
负号 -
取内容 *
取首地址 &
求字节数 sizeof()