运算符优先级括号中的问题

时间:2017-06-18 20:05:05

标签: c++

我在操作员优先级方面遇到困难。有人可以具体解释部分(A)为什么c = 1。 (B)为什么增量和减量不会相互抵消,部分(C),c会发生什么?

#include<iostream>
using namespace std;
int main(){
//A
long x = 3, y = 1;
long a, b, c;
a = b = x;
(c = b) = y;
cout << a << ", " << b << ", " << c <<endl; //3, 3, 1

//B
long x = 3, y = 10, z = 4;
long a = (--x)++;
long b = (z += y);
cout << a << ", " << b <<endl; // 2, 14

//C
long x = 3, y = 5;
long a, b, c;
a = x > y;
c = ((b = 13) || (b = 20));
cout << a << ", " << b << ", " << c <<endl ;
}

3 个答案:

答案 0 :(得分:0)

// A部分 c = 1,因为(c = b)= y。将B的第一个值分配给c,然后将y的值分配给c。这就是为什么C具有y值。所以c == 1;

// B部分 long a =( - x)++; 这里增量和减量不会相互抵消,因为它是后增量,因此第一个值被赋值给一个变量,然后递增。所以--x表示2。因此,将值2分配给a,然后x得到其旧值3.

// C部分

a的值为0,因为x&gt; y语句为false,因此它获得0值。 b的值是13,因为优先级是从右到左所以b被赋值为13而c被赋值为true,因为括号内的语句为真

答案 1 :(得分:0)

A)c指定b的值,然后指定y的值 B)首先递减x,然后分配给a然后递增。查看a = ++xa = x++之间的差异。 betwen prefix operator and postfix operator
C)我会回答问题。什么值可以逻辑运算符|| retrun?当逻辑运算符将整数作为输入时会发生什么?

答案 2 :(得分:0)

好吧,让我检查我的混乱清理技巧:

using namespace std;
//A
{
    long x{3};
    long y{1};
    long a;
    long b;
    long c;
    long & b_ref{b = x}; // b is 3
    a = b_ref;           // a is 3
    long & c_ref{c = b}; // c is 3
    c_ref = y;           // c is 1
    cout << a << ", " << b << ", " << c <<endl; //3, 3, 1
}
//B
{
    long x{3};
    long y{10};
    long z{4};
    long & x_ref{--x};    // x is 2
    long tmp_x{x_ref};    // 2
    x_ref = x_ref + 1;    // x is 3
    long a{tmp_x};        // a is 2
    long & z_ref{z += y}; // z is 14
    long b{z_ref};        // b is 14
    cout << a << ", " << b <<endl; // 2, 14
}
//C
{
    long x{3};
    long y{5};
    long a;
    long b;
    long c;
    bool x_gt_y{x > y};            // false
    a = x_gt_y;                    // a is 0
    long & b_ref1{b = 13};         // b is 13
    long & b_ref2{b = 20};         // b is 20
    bool b_or_b{b_ref1 || b_ref2}; // true
    c = b_or_b;                    // c is 1
    cout << a << ", " << b << ", " << c <<endl ;
}
相关问题