首页 > 代码库 > 被C语言操作符优先级坑了

被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;}