2012-09-19 44 views
8

Tôi muốn biết liệu toán tử ưu tiên trong ngôn ngữ lập trình có phụ thuộc vào việc triển khai hay không có quy tắc cố định mà tất cả ngôn ngữ đều tuân theo. Và nếu có thể, bạn có thể đặt hàng các toán tử sau với ưu tiên cao nhất trước: AND, OR, NOT, XOR.Các toán tử Boolean được ưu tiên

+0

Tôi không bao giờ có thể nhớ những ưu tiên của XOR nhưng tất cả các ngôn ngữ tôi đã sử dụng có cùng độ ưu tiên cho ba người còn lại. – Neil

Trả lời

8

Tôi googled và phát hiện ra this cho biết một số ngôn ngữ như APL và SmallTalk không có quy tắc ưu tiên nhà điều hành và họ đánh giá đúng biểu thức từ trái sang phải/trái sang phải.

Tuy nhiên, trật tự tương đối ưu tiên theo sau là KHÔNG> XOR> VÀ> OR trong hầu hết các ngôn ngữ đặc biệt là những nguồn gốc từ C

+1

Theo [this] (http://en.cppreference.com/w/c/language/operator_precedence), ưu tiên của C là thực tế NOT> AND> XOR> OR, AND xuất hiện trước XOR. JavaScript và Java cũng tuân theo thứ tự này. – mbomb007

2

Boolean hoặc Bitwise? Không có quy tắc cố định, hầu hết các ngôn ngữ đều có quy tắc tương tự nhưng khác nhau về chi tiết. Tra cứu nó theo định nghĩa ngôn ngữ.

+0

Được rồi. Tôi đã có các toán tử logic khi đăng. Cảm ơn đã nhắc tôi về các toán tử bitwise. – Mika

0

Có ba toán tử Boolean cơ bản: NOT, AND, OR. XOR chỉ là một phiên bản đơn giản của A AND NOT B OR NOT A AND B hoặc (A OR NOT B) AND (NOT A OR B). Vì vậy, chỉ có ba loại này có quyền ưu tiên chung: KHÔNG> VÀ> HOẶC. XOR có vị trí khác nhau trong ngôn ngữ, nhưng nó chắc chắn không được ưu tiên cao hơn AND và không thấp hơn OR. Hầu hết các ngôn ngữ (ví dụ: C/C++/Javascript, v.v.) có ngôn ngữ giữa AND và OR, nhưng trong các ngôn ngữ khác (ví dụ: Perl) XOR có cùng mức ưu tiên như OR.

(OR có thể được thể hiện chỉ AND và NOT sử dụng, nhưng nó vẫn là một nhà điều hành cơ bản: A OR B = NOT(NOT A AND NOT B))

+0

Có lý do chính đáng để có quyền ưu tiên khác không? Tôi nghĩ rằng (trong một thế giới lý tưởng) các toán tử logic nên có cùng một mức độ ưu tiên và các phép toán lôgic luôn được thực hiện từ trái sang phải. Có lý do chính đáng nào để theo một cách khác không? 'true xor false hoặc true' nên được đánh giá là true (' (true xor false) hoặc true'), không phải là false ('true xor (false hoặc true)') – Junior

+0

Có. Lý do rất giống với toán tử số học. Đây là một "đại số khác" (đại số boolean). AND là một loại phép nhân, và OR giống như bổ sung. Có các khu vực, nơi nó quan trọng hơn đại số chuẩn (ví dụ: xây dựng các mạch số). – FERcsI

Các vấn đề liên quan