我在操作员优先级方面遇到困难。有人可以具体解释部分(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 ;
}
答案 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 = ++x
和a = 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 ;
}