簡體   English   中英

帶括號的運算符優先級問題

[英]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 = ++xa = 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM