Birisi gerekçeyi açıklayabilir mi, neden birçok popüler dilde (aşağıdaki nota bakınız) karşılaştırma işleçleri (==,! =, <,>, <=,> =) Bitsel operatörlerden daha yüksek önceliğe sahip olabilir (&, |, ^ , ~)?
Bu önceliğin doğal olacağı bir kullanımla karşılaştığımı sanmıyorum. Her zaman gibi şeyler:
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
Kullanacağım davalar:
flags = ( x == 6 | 2 ); // set bit 0 when x is 6, bit 1 always.
var olmayanlara yakındır.
Dil tasarımcılarının operatörlerin bu şekilde önceliğine karar verme motivasyonu neydi?
Örneğin, en iyi 12 dilde SQL dışındaki herkes langpop.com'daki Programlama Dili Popülerliği listesinde olduğu gibidir: C, Java, C ++, PHP, JavaScript, Python, C #, Perl, SQL, Ruby, Shell, Visual Basic.
[arithmetics] [logic operator] [arithmetics]
. Çoğu programcı parantez dağınıklığı yaratmaz if(((x+getLowX()) < getMinX) || ((x-getHighX())>getMaxX())))
- çoğu mantıklara göre aritmetik önceliğini üstlenir ve yukarıdakilerin if( ( x + getLowX() < getMinX ) || ( x - getHighX() > getMaxX() ))
önceliğini varsayar . Şimdi sezgisel olarak aynı davranmalıdır, XOR aritmetik operatörüdür. Olarak yorumlanması gerçeği tamamen sezgiseldir. +
<
if( x ^ getMask() != PATTERN )
if( x ^ ( getMask() != PATTERN ) )