运算符优先级以及合理使用
作者:
YNORI
,
2023-04-16 13:33:07
,
所有人可见
,
阅读 187
运算符的优先级
运算符在表达式中以不同的优先级顺序进行计算。当一个表达式中有多个运算符时,会按照以下顺序进行计算:
1. 圆括号内的表达式
2. 一元运算符(如取反、自增、自减等)
3. 乘法、除法、取模运算符(* / %)
4. 加法、减法运算符(+ -)
5. 移位运算符(<< >>)
6. 关系运算符(< <= > >=)
7. 相等性运算符(== !=)
8. 按位与运算符(&)
9. 按位异或运算符(^)
10. 按位或运算符(|)
11. 逻辑与运算符(&&)
12. 逻辑或运算符(||)
13. 条件运算符(?:)
14. 赋值运算符(= += -= *= /= %= <<= >>= &= ^= |=)
15. 逗号运算符(,)
注意:当运算符的优先级相同时,会按照从左到右的顺序计算表达式。如果想要改变优先级顺序,
可以使用圆括号来明确运算次序。
实数对应的二进制表示方案
对于每一个实数,它所对应的二进制是唯一的,每一个二进制是唯一的01编码,那么可以把0,1表
示为不同的涵义。那么一直每一个方案为n,根据位运算就可以知道对应二进制位是0还是1,进而
知道所对应的操作方案。
运算符的巧妙使用
递归实现指数型枚举
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
void dfs(int u,int way) // u表示处理的位数,way表示方案数,对应的二进制编码中,1表示操作,0表示不操作
{
if(u == n)
{
for (int i = 0; i < n; i ++ )
if(way >> i & 1) cout << i + 1 << " ";
cout << endl;
return;
}
dfs(u + 1, way); // 表示第u位不操作
dfs(u + 1, way | 1 << u); // 表示第u位操作,注意运算符的优先级
}
int main()
{
cin >> n;
dfs(0,0);
return 0;
}
第二个版本
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
int a[20];
bool st[20]; // true表示选,false表示不选
void dfs(int u)
{
if(u > n)
{
for (int i = 1; i <= n; i ++ )
if(st[i] == 1) cout << i << " ";
cout << endl;
return;
}
// false -- 不选
st[u] = false;
dfs(u + 1);
st[u] = false; // 恢复现场(一开始的状态时false)
// true -- 选
st[u] = true;
dfs(u + 1);
st[u] = false;
}
int main()
{
cin >> n;
dfs(1);
return 0;
}