为什么该程序不输出布尔值?

时间:2018-08-28 22:36:59

标签: c++ integer

#include <iostream>
using namespace std;
int main()
{
    int a = 8;
    cout << "ANDing integer 'a' with 'true' :" << a && true;
    return 0;
}

该程序为什么输出8而不输出1(对于true)?

4 个答案:

答案 0 :(得分:8)

如果查看operator precedence,您会发现左移运算符<<的优先级高于逻辑AND运算符&&

因此,其评估为:

(cout << "ANDing integer 'a' with 'true' :" << a)  &&  true;

显示8。

答案 1 :(得分:4)

逻辑AND运算符&&用于表达式。
计算第一个表达式。 如果第一个表达式为假,则不再进行求值。 否则,将评估第二个表达式。
接下来,返回两个布尔表达式的结果。

因此,第一个表达式被求值:

cout << "ANDing integer 'a' with 'true' :" << a

评估的副作用是控制台输出如下:

ANDing integer 'a' with 'true' :8

生成输出是因为它是评估第一个表达式的副作用。

答案 2 :(得分:3)

首先在表达式8 && true中对8求值(然后也进行流式处理)。评估结果为true,然后运算符返回true。但是,比8已经早已开始。如果改用(8 && true),则将首先对括号进行求值,并保证结果为1,然后将其进行流式处理。

这种行为称为Operator Precedence-描述操作符的执行顺序(在您的情况下为&&<<)。

答案 3 :(得分:2)

逻辑AND运算符&&用于表达式。如果两者都为true,则返回true和false。

cout << "ANDing integer 'a' with 'true' :" << a && true;

被评估为:

(cout << "ANDing integer 'a' with 'true' :" << a)  &&  true;

由于运算符优先级(<<的优先级高于AND &&) 给您打印以下内容:8 如果我们进行以下更改:(a && true); 它会为您打印以下内容:1