繁体   English   中英

C ++运算符优先级为按位AND和逻辑OR

[英]C++ Operator precedence for Bitwise AND and Logical OR

这个页面 ,我知道Bitwise AND的运算符优先级高于逻辑OR。 但是,以下程序会产生意外输出。

#include<iostream>
using namespace std;

int main()
{
int a = 1;
int b = 2;
int c = 4;

if ( a++ || b++ & c++)
{
    cout <<a <<" " << b <<" " << c <<" " <<endl;
}
return 0;
}

输出是

 2 2 4

这意味着逻辑OR首先起作用。 这是否意味着此处违反了运算符优先级规则?

优先级仅表示表达式如下所示

  ( (a++ || (b++ & c++)))

一旦这样做,短路意味着只评估第一个表达式。

这就是a = 2bc不变的原因。

键盘

此链接可以帮助您:

http://en.cppreference.com/w/cpp/language/operator_precedence

优先权

10和按位AND
11 ^按位异或(独占或)
12 | 按位OR(包含或)
13 &&逻辑与
14 || 逻辑或

这意味着在'||'之前评估'& '

出于好奇,了解这些运营商的优先权是完全可以的。 现实生活中,这个没有括号的代码使意图绝对清晰是不可接受的。

如果是||的左侧 具有非零值,则根本不评估右侧。 它保证不被评估。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM