关于括号,布尔逻辑和'\ n'

时间:2019-06-25 17:08:49

标签: c++ boolean-logic

我发现(true && false)给出0,而true && false(没有括号)给出1。 这个问题可能很愚蠢,因为我刚刚开始学习C ++,但是我在任何地方都找不到答案。

我运行了以下内容:

cout << (true && false) << '\n';
cout << true && false << '\n';
cout << (true && false == true);

它给了我

    0
    10

看到这个之后,我变得更加困惑:

  1. (true && false)true && false(不带括号)之间有什么区别?
  2. 因为true && false给了我1,所以我认为没有括号的true && falsetrue。但是,(true && false == true)给了我0。为什么?是因为01不一定表示falsetrue吗?
  3. 此外,第二行的'\n'似乎不起作用。为什么?

3 个答案:

答案 0 :(得分:5)

table of operator precedence所示,<<的优先级为7,&&的优先级为14

结果,表达式cout << true && false << '\n';可以重写为:

(cout << true) && (false << '\n');

计算结果为:

(cout << true)         // Output: "1"; Evaluates to an ostream-object.
(false << '\n')        // No output; Evaluates to 0, the '\n' "disappears"
[ostream-object] && 0; // No output; Evaluates to 0

答案 1 :(得分:2)

cout << true && false << '\n';

相同 (cout << true) && (false << '\n');

true(1)被流传输到cout,返回对该流的引用。
&&
false(0)左移\n(10)位,结果为0。

该流现在处于布尔上下文中(由于&&),由于其仍处于良好状态,因此将通过其转换运算符true进入operator bool ()

我们剩下true && 0,结果为false

(cout << true)   &&   (false << '\n')   ==
(cout << true)   &&   (false << 10)     ==   // right side: 0 << 10
(cout << true)   &&   0                 =>   // true is sent out here
    bool(cout)   &&   0                 =>
         true    &&   0
               false

答案 2 :(得分:2)

&&的优先级低于<<==,因此代码的行为如下:

cout << (true && false) << '\n';
(cout << true) && (false << '\n');
cout << (true && (false == true));

在第一行中,您在对与错。 在第二行中,您正在传输true,并将false换行符的ascii值左移(无效)。 在第三行中,您正在测试false是否等于true,这将得出false。