9

In C++, qual è il fondamento logico di == e! = Che ha una precedenza più elevata rispetto a AND bit, XOR e OR bit?Qual è il motivo per cui == ha precedenza più alta di AND, XOR e OR bit a bit?

sembrerebbe a me più naturale avere operator== e operator!= vengono dopo operator&, operator^ e operator|. Mi piacerebbe capire la motivazione in modo da poter ricordare meglio l'ordine.

Ad esempio, vorrei che il seguente tipo di utilizzo potrebbe essere comune:

if (bitFields & value == 0) { // Incorrect test. 
    // Do Something. 
} 

Poiché il risultato == è 1 o 0, perché mai voglia di usarlo per operazioni bit per bit? Invece, quanto sopra deve essere scritto come:

if ((bitFields & value) == 0) { // Correct test. 
    // Do Something. 
} 

per ottenere il significato desiderato in cui l'AND bit a bit viene eseguito prima del confronto a zero.

+6

La logica del C++ è che C usa le stesse regole di precedenza. È necessario modificare la domanda in C. – nosid

+2

possibile duplicato di [C Operator precedence (bitwise e inferiore a ==)] (http://stackoverflow.com/questions/4685072/c-operator-precedence-bitwise-lower-than) – assylias

risposta

6
  1. E 'storico dal C
  2. Considerare l'utilizzo di funzioni nel if dichiarazione

esempio

if (func1() == 2 & func2() == 3) 

Con la precedenza di == essere superiore che & assicura che entrambe le funzioni sono chiamati.

+2

Questo non sembra essere l'uso corretto di un AND bit a bit. – Matt

+1

@Matt, è un uso perfettamente giustificato: nessun cortocircuito. – chris

+0

Cosa succede se 'func1()' restituisce 1 e 'func2()' restituisce 2? – mkb

Problemi correlati