被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;
}
posted @ 2014-08-21 19:43  weixliu  阅读(390)  评论(0编辑  收藏  举报