“与”和“逻辑或”的C++运算符优先级

C++ Operator precedence for Bitwise AND and Logical OR

本文关键字:C++ 运算符 优先级 逻辑或      更新时间:2023-10-16

从这一页中,我知道逐位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++)))

一旦您这样做,短路意味着只计算第一个表达式。

这就是为什么CCD_ 1但是CCD_ 2和CCD_。

码盘

此链接可以帮助您:

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

优先级

10&位与
11^位XOR(异或)
12|位或(包括或)
13&amp;逻辑与
14||逻辑OR

这意味着'&''|'之前求值。

了解这些运算符的优先级是非常好的,只是出于好奇。在真实的生活中,这种没有括号来明确意图的代码是不可接受的。

如果||的左侧有一个非零值,则根本不计算右侧。它保证不会被评估。