Чи може хтось пояснити обґрунтування, чому в купі найбільш популярних мов (див. Примітку нижче) оператори порівняння (==,! =, <,>, <=,> =) Мають більший пріоритет, ніж бітові оператори (&, |, ^ , ~)?
Я не думаю, що я коли-небудь стикався з використанням, де цей пріоритет був би природним. Це завжди такі речі, як:
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 ) )
абсолютно протиінтуїтивний.