[英]why parenthesis is unable to change c++ operator precedence in this case?
[英]Operator Precedence Issues with parenthesis
我在使用運算符優先級時遇到了困難。 有人可以專門解釋部分(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 ;
}
//部分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> y語句為false,因此它的值為0。 b的值是13,因為優先級是從右到左,所以b分配了值13,c分配了true,因為在括號內語句為true
A)為c分配b的值,然后分配y的值
B)x首先遞減,然后分配給a,然后遞增。 請參見a = ++x
和a = x++
之間a = ++x
區別,即在前綴運算符和后綴運算符之間 。
C)我會用問題回答。 邏輯運算符||可以使用哪些值 retrun? 當邏輯運算符將整數作為輸入時會發生什么?
好吧,讓我檢查一下我清理混亂的技能:
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 ;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.