Может ли кто-нибудь объяснить обоснование, почему в группе самых популярных языков (см. Примечание ниже) операторы сравнения (==,! =, <,>, <=,> =) Имеют более высокий приоритет, чем побитовые операторы (&, |, ^ ~)
Я не думаю, что я когда-либо сталкивался с использованием, где этот приоритет был бы естественным. Это всегда такие вещи, как:
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
Случаи, когда я бы использовал:
flags = ( x == 6 | 2 ); // set bit 0 when x is 6, bit 1 always.
близки к несуществующему.
Какова была мотивация дизайнеров языка, чтобы принять решение о таком приоритете операторов?
Например, все, кроме SQL в топ-12 языков, аналогичны спискам популярности языков программирования на langpop.com: C, Java, C ++, PHP, JavaScript, Python, C #, Perl, SQL, Ruby, Shell, Visual Basic.
[arithmetics] [logic operator] [arithmetics]
. Большинство программистов не создают беспорядок в скобках, как if(((x+getLowX()) < getMinX) || ((x-getHighX())>getMaxX())))
большинство - большинство будет принимать арифметику над логикой и писать, if( ( x + getLowX() < getMinX ) || ( x - getHighX() > getMaxX() ))
предполагая приоритет +
выше <
. Теперь интуитивно if( x ^ getMask() != PATTERN )
следует вести себя так же, XOR является арифметическим оператором. Факт, что это интерпретируется как if( x ^ ( getMask() != PATTERN ) )
полностью нелогичное.