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



输出结果为文章来源地址https://www.toymoban.com/news/detail-585014.html

mid: 4
mid2: 5

到了这里,关于C/CPP位运算优先级的坑的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言--C运算符的优先级与结合性

             优先级 运算符 含义 运算类型 结合方向 1 ()   [ ]   -    . ++ -- 圆括号、函数参数表 数组元素下标 指向结构体成员 引用结构体成员 后缀增1、后缀减1 —— 自左向右 2 ! ~ ++  -- - * (类型标识符) sizeof 逻辑非 按位取反 前缀增1、前缀减1 取负 间接寻址运算符

    2024年02月16日
    浏览(35)
  • Java 运算符优先级

    在 Java 中,每个运算符都有一个优先级,优先级高的运算符会先执行,而优先级低的运算符会后执行。如果有多个运算符在同一个表达式中出现,那么需要按照运算符优先级的规则确定它们的执行顺序。 Java 运算符的优先级如下所示(从高到低): 后缀运算符:++、– 一元运

    2024年02月07日
    浏览(42)
  • Verilog运算符优先级

    0 ! ~ 1 * / % 2 + 1 3 4 = = 5 == != === !== 6 ~ 7 ^ ^~ 8 | ~| 9 10 || 11 ?: 从上至下优先级依次降低

    2024年02月16日
    浏览(36)
  • JavaScript运算符及优先级

    一、算数运算符 算术运算符(+,-, * ,/,%【重要】,++【重要】,--) 其中 + 的左边和右边有 \\\" \\\", 表示拼接 i++,表示先赋值后+1     ++i ,表示先+1后赋值  同理减法也是如此 算数运算中,+ 可以进行隐式迭代,将字符串数字转化为Number类型 二、比较算数运算符 比较运算

    2024年02月07日
    浏览(38)
  • Python 运算符 算数运算符 关系运算符 赋值运算符 逻辑运算 (逻辑运算符的优先级) 位运算 成员运算符 身份运算符 运算符的优先级

    四则运算+ - * / 取模运算 % 之所以出现1 与 2 的不同 是因为python取模计算规则为 r = p-q*floor(p/q) floor表示向下取余 **幂 **** 取整除 向下取整 ‘//’ 等于关系 == 大于 大于等于(大于||等于) 小于 小于等于(小于||等于) != 不等于 不同数据类型之间的比较,若是不同的数据类型进行比

    2024年02月04日
    浏览(66)
  • C#常用运算符的优先级

    运算符在C#编程语言中扮演着重要的角色,用于执行各种计算和操作。了解运算符的优先级是编写高效和正确代码的关键。本文将深入探讨C#中38个常用运算符的优先级划分和理解,并提供详细的说明和示例,以帮助读者更好地理解运算符的使用。 算术运算符用于执行基本的数

    2024年02月05日
    浏览(42)
  • 运算符的优先级(规矩是人定的)

    什么是经典?经典就是理论不随时间变迁而变化。《东方不败》中的很多台词让人时不时想起来振聋发聩。比如 很多事情不是自己想的那样,规矩是人定的。 从小到大,我们都学过数学运算时要 先乘除后加减 ,谁定的? 舔狗说:“老师讲的都是对的,所以这样!”有思想

    2024年02月03日
    浏览(36)
  • C++所有运算符及其优先级表格

    运算符 运算符介绍 优先级 :: 范围解析 1 () [] - . 圆括号、方括号、箭头、点号 2 ++ -- 后缀递增、后缀递减 2 typeid const_cast dynamic_cast reinterpret_cast static_cast 类型名称、常量类型转换、动态类型转换、重新解释的类型转换、静态类型转换 2 ! ~ ++ -- + - * (type) sizeof new delete 非、按位

    2024年02月13日
    浏览(35)
  • c语言[]优先级大于*优先级

    本博文源于笔者正在学习的c语言[]优先级大于*优先级.在定义二维数组时,a+1与[]号结合后,谁的优先级更高,是本博文探讨的话题 想要看看*与[]谁的优先级更高 通过代码发现[]优先级比*号要高(a+1)[1]等价于a+2再取*号就是9了,在第二个pirintf代码中,等价于a[1][1] =6,第三个

    2024年01月20日
    浏览(57)
  • 【从零学习python 】08.Python了解位运算符, 运算符优先级

    按位运算符是把数字看作是二进制来进行计算的。 下表中变量 a 为 60, b 为 13,二进制格式如下: a b = 0000 1100 a | b = 0011 1101 a ^ b = 0011 0001 ~a = 1100 0011 位运算 描述 示例 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a b) 输出结果 12 ,

    2024年02月10日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包