Qualcuno potrebbe spiegare la logica, perché in un gruppo di più popolari linguaggi (vedi nota sotto) gli operatori di confronto (==,! =, & lt ;, & gt ;, < =, > =) hanno una priorità più alta di quella bit a bit operatori (& amp ;, |, ^, ~)?
Non penso di aver mai incontrato un uso in cui questa precedenza sarebbe stata naturale. È sempre tipo:
if( (x & MASK) == CORRECT ) ... // Chosen bits are in correct setting, rest unimportant
if( (x ^ x_prev) == SET ) // only, and exactly SET bit changed
if( (x & REQUIRED) < REQUIRED ) // Not all conditions satisfied
I casi in cui vorrei usare:
flags = ( x == 6 | 2 ); // set bit 0 when x is 6, bit 1 always.
sono vicini a inesistenti.
Qual è stata la motivazione dei progettisti di linguaggi a decidere su tale precedenza degli operatori?
Ad esempio, tutti tranne l'SQL nelle 12 migliori lingue sono come in Programming Language Popularity list su langpop.com : C, Java, C ++, PHP, JavaScript, Python, C #, Perl, SQL, Ruby, Shell, Visual Basic.