Bisakah seseorang menjelaskan alasannya, mengapa dalam banyak bahasa paling populer (lihat catatan di bawah) operator perbandingan (==,! =, <,>, <=,> =) Memiliki prioritas lebih tinggi daripada operator bitwise (&, |, ^ , ~)?
Saya tidak berpikir saya pernah menemukan penggunaan di mana prioritas ini akan alami. Itu selalu seperti:
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
Kasing tempat saya menggunakan:
flags = ( x == 6 | 2 ); // set bit 0 when x is 6, bit 1 always.
hampir tidak ada.
Apa motivasi perancang bahasa untuk memutuskan diutamakan operator seperti itu?
Sebagai contoh, semua kecuali SQL pada 12 bahasa teratas adalah seperti itu pada daftar Bahasa Pemrograman Popularitas di langpop.com: C, Java, C ++, PHP, JavaScript, Python, C #, Perl, SQL, Ruby, Shell, Visual Basic.
[arithmetics] [logic operator] [arithmetics]
. Kebanyakan pemrogram tidak membuat kekacauan tanda kurung seperti if(((x+getLowX()) < getMinX) || ((x-getHighX())>getMaxX())))
- kebanyakan akan menganggap diutamakan aritmatika daripada logika dan menulis if( ( x + getLowX() < getMinX ) || ( x - getHighX() > getMaxX() ))
dengan asumsi diutamakan di +
atas <
. Sekarang secara intuitif if( x ^ getMask() != PATTERN )
harus berperilaku sama, XOR menjadi operator aritmatika. Fakta itu ditafsirkan sebagai if( x ^ ( getMask() != PATTERN ) )
sepenuhnya kontra-intuitif.