C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C/CPP运算优先级坑

C/CPP运算优先级的坑及解决

作者:_不会dp不改名_

这篇文章主要介绍了C/CPP运算优先级的坑及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

C/CPP运算优先级坑

1. 位运算优先级低于比较运算符

做leetcode时遇到的,判断一个数某一比特位是否为0。

if ( val & 2 == 0) {
	// do someting...
}

万万没想到&运算符的优先级是低于==的,debug了好久,得加上括号。

1.1 验证

#include <iostream>
int main( int argc, char *argv[]){
    int val = 2;
    if ( val & 1 == 0) {
        std::cout << "without (): bit 1 is 0" << std::endl;
    }
    else {
        std::cout << "without (): bit 1 is 1" << std::endl;
    }
    if ( (val & 1) == 0) {
        std::cout << "with (): bit 1 is 0" << std::endl;
    }
    else {
        std::cout << "with (): bit 1 is 0" << std::endl;
    }
    return 0;
}

输出结果为

without (): bit 1 is 1
with (): bit 1 is 0

2. 移位运算符优先级低于算术运算符

这是在写二分的时候遇到的, l + (r-l) >> 1 的值永远为r >> 1

应该写作l + (r - l >> 2)

2.1 验证

#include <iostream>
int main( int argc, char *argv[]){
    int l = 2, r = 8;
    int mid = l + (r - l) >> 1;
    int mid2 = l + ( r - l >> 1);
    std::cout << "mid: " << mid << std::endl;
    std::cout << "mid2: " << mid2 << std::endl;
    return 0;
}

输出结果为

mid: 4
mid2: 5

C语言运算优先级口诀

C语言常用运算符的优先级口诀是:“单算关逻条赋逗”;

如果加入位运算符,完整口诀是:“单算移关与,异或逻条赋”。

另,逗号运算符(,) 级别最低,口诀中没有表述,需另加记忆..

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文