我们先来介绍一下位运算
位运算
故事是这样的,蒟蒻今天开心的做到了2019年提高组D1T2,突然发现自己不知道异或运算是个什么东西,这放考场上不就当场凉凉。吓得写篇文章学习位运算。
类型
百度百科说有七种
含义 | c++ |
---|---|
按位与 | a & b |
按位或 | a | b |
按位异或 | a^b |
按位取反 | ~a |
左移b位 | a<<b |
带符号右移 | a>>b |
不带符号右移 | a>>>b |
具体是什么样子可以自行查看
运算优先级
原文网址:https://blog.csdn.net/qq_37746778/article/details/87451364
最高级
出现同级别运算符时的结合方向是从左往右
(下面级别没写结合顺序时,默认是从左往右)。
( ) 圆括号
[ ] 下标运算符号
-> 指向结构体成员运算符
. 结构体成员运算符
第二级 单目运算符
!、~、++、–、-、(类型)、*、&、sizeof。
这一级都是单目运算符号,这一级的结合方向是从右向左。
比如出现p++,这时和++同级别,先算右边,再左边。
所以p++等价于(p++),而不是(*p)++。
第三极 数学运算符
+、-、*、/、%
这一级都是算术运算符,结合顺序和数学学习中一致的,先乘除取余数,后加减。
第四级 左移右移
<<、>> 位运算时可能需要用到。
第五级 关系运算符
<、<=、>、>=、!=、==
这些运算符也称为关系运算符,其中<、<=、>、>=高于!=、==。
第六级 &,^, |
这三个符号也是位运算符号,其中内优先级,&>^>|。
例如 23|2^5=10111| 10^101=10111|110=10111=23
第七级
&&、|| 其中逻辑与的优先级大于逻辑或
第八级 条件运算符
?与: 也称为条件运算符号,是C语言中唯一的一个三目运算符,结合顺序是从右往左。
第九级 赋值运算符
=、+=、-+、*=、/=、%=,>>=、<<=、&=、^=、|=
结合顺序是从右往左
最低级 逗号运算符
逗号运算符也称为顺序求值运算符,在C语言中,运算级别最低。
总结
逗号运算符<赋值运算符<条件运算符<逻辑运算符<关系运算符<左移、右移运算符<算术运算符<单目运算符<括号运算符、成员运算符