被C语言操作符优先级坑了
今天有一个枚举的题目的代码是这样的:
重点在于maxXor这个函数的实现,枚举两个数字,其中maxr保存了最大值的 i 异或 j , 可是这个程序执行结果大大出乎意外-_-. 然后就把 i 异或 j 的结果临时保存在int,进行比较,程序正确的执行了。原来是被操作符优先级坑到了。位操作的优先级比比较操作符的优先级更低。
#include <map> #include <set> #include <list> #include <cmath> #include <ctime> #include <deque> #include <queue> #include <stack> #include <bitset> #include <cstdio> #include <limits> #include <vector> #include <cstdlib> #include <numeric> #include <sstream> #include <iostream> #include <algorithm> using namespace std; /* * Complete the function below. */ int maxXor(int l, int r) { int maxr = -1; for(int i = l;i <= r;i++) { for(int j = i;j <= r;j++) { if( i^j > maxr ) { maxr = i^j; } } } return maxr; } int main() { int res; int _l; cin >> _l; int _r; cin >> _r; res = maxXor(_l, _r); cout << res; return 0; }