Ai đó có thể giải thích lý do, tại sao trong một loạt các ngôn ngữ phổ biến nhất (xem ghi chú bên dưới) các toán tử so sánh (== ,! =, <,>, <=,> =) Có mức độ ưu tiên cao hơn các toán tử bitwise (&, |, ^, ^ , ~)?
Tôi không nghĩ rằng tôi đã từng gặp phải việc sử dụng trong đó quyền ưu tiên này là tự nhiên. Nó luôn luôn là những thứ như:
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
Các trường hợp tôi sử dụng:
flags = ( x == 6 | 2 ); // set bit 0 when x is 6, bit 1 always.
gần như không có.
Động lực của các nhà thiết kế ngôn ngữ để quyết định ưu tiên như vậy của các nhà khai thác là gì?
Ví dụ: tất cả ngoại trừ SQL ở 12 ngôn ngữ hàng đầu đều giống như trong danh sách phổ biến ngôn ngữ lập trình tại langpop.com: C, Java, C ++, PHP, JavaScript, Python, C #, Perl, SQL, Ruby, Shell, Visual Basic.
[arithmetics] [logic operator] [arithmetics]
. Hầu hết các lập trình viên không tạo ra một mớ hỗn độn các dấu ngoặc đơn như thế if(((x+getLowX()) < getMinX) || ((x-getHighX())>getMaxX())))
- hầu hết sẽ cho rằng các ưu tiên của arithologists trên logic và viết if( ( x + getLowX() < getMinX ) || ( x - getHighX() > getMaxX() ))
giả định ưu tiên +
ở trên <
. Bây giờ theo trực giác if( x ^ getMask() != PATTERN )
nên hành xử giống nhau, XOR là toán tử số học. Thực tế nó được hiểu if( x ^ ( getMask() != PATTERN ) )
là hoàn toàn phản trực giác.