2008-09-10 30 views

Trả lời

13

logic hoạt động ưu tiên theo thứ tự

  1. Not
  2. And
  3. Or
  4. Xor
  5. Eqv
  6. Imp

So sánh hoạt động ưu tiên theo thứ tự

  1. =
  2. <>
  3. <
  4. >
  5. <=
  6. >=
  7. Like, Is

Arithmetic Operation Precedence tự

  1. ^
  2. - (phủ định unary)
  3. *, /
  4. \
  5. Mod
  6. +, - (nhị phân bổ sung/trừ)
  7. &

Nguồn:Sams Teach Yourself Visual Basic 6 in 24 Hours — Appendix A: Operator Precedence

+0

Đơn đặt hàng là gì? Từ thấp nhất đến cao nhất? –

+1

Việc trình bày câu trả lời có thể hơi gây nhầm lẫn. Thứ tự bên trong ba loại là từ đầu đến cuối, nhưng thứ tự của các danh mục là từ đầu đến cuối: Trong thực tế, các phép toán số học được đánh giá trước các phép so sánh, được đánh giá trước các phép toán logic. Đối với một bài trình bày rõ ràng hơn, tôi sẽ đề nghị trình bày câu trả lời bằng cách đặt các phép toán số học trước tiên, tiếp theo là các phép so sánh, theo sau là các phép toán logic. Tham khảo tốt cũng ở đây: https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/operator-precedence –

9

Nó phụ thuộc vào hay không, bạn đang ở trong trình gỡ lỗi . Thực sự. Vâng, sắp xếp.

Dấu ngoặc đơn đầu tiên, tất nhiên. Sau đó so sánh (>, <, =, v.v ...). Sau đó, các nhà khai thác hợp lý. Bí quyết là thứ tự thực hiện không được xác định.Điều đó có nghĩa là đưa ra biểu thức sau:

If A < B And B < C Then 

bạn được đảm bảo rằng cả hai toán tử < đều sẽ được thực thi trước lôgic và so sánh. Nhưng bạn không được bảo đảm so sánh nào sẽ được thực thi trước.

IIRC, trình gỡ lỗi thực hiện từ trái sang phải, nhưng ứng dụng đã biên dịch thực hiện từ phải sang trái. Tôi có thể có chúng ngược lại (nó đã được một thời gian dài), nhưng điều quan trọng là chúng khác nhau. Vì vậy, ưu tiên thực sự không thay đổi, nhưng thứ tự thực hiện có thể.

+0

Rất ít ngôn ngữ chỉ định thứ tự chính xác của đánh giá trong tuyên bố như vậy - thường là trình biên dịch được tự do làm điều đó theo cách được coi là hiệu quả hơn/nhanh/an toàn/v.v. Người ta không nên viết mã phụ thuộc vào thứ tự thực hiện bằng bất kỳ ngôn ngữ nào! –

+0

Nếu bạn viết mã phụ thuộc vào thứ tự thực hiện trong một biểu thức như thế, bạn xứng đáng với mọi thứ bạn nhận được! "Luôn mã hóa như thể người kết thúc duy trì mã của bạn là một kẻ tâm thần bạo lực, người biết bạn sống ở đâu." – MarkJ

+1

Joel, điều này có nghĩa là một thao tác OR sẽ không bao giờ có thể bỏ qua phía bên tay phải nếu trái được đánh giá là đúng và giống với AND và false? – Oskar

2

Sử dụng dấu ngoặc đơn


EDIT: Đó là lời khuyên của tôi cho mã mới! Nhưng Oscar đang đọc mã của người khác, vì vậy phải tìm ra nó bằng cách nào đó. Tôi đề nghị chủ đề hướng dẫn sử dụng VB6 Ưu tiên vận hành. Thật không may chủ đề này dường như không nằm trong MSDN online VB6 manual, vì vậy tôi sẽ dán thông tin toán tử logic vào đây. Nếu bạn đã cài đặt trợ giúp VB6 (thư viện MSDN), bạn sẽ có nó trên máy của bạn.

Các toán tử logic được đánh giá theo thứ tự sau đây được ưu tiên:

Not 
And 
Or 
Xor 
Eqv 
Imp 

Chủ đề này cũng giải thích được ưu tiên để so sánh và toán tử số học.

Tôi sẽ đề xuất một khi bạn đã tìm ra quyền ưu tiên, bạn đặt trong dấu ngoặc đơn trừ khi có một số lý do chính đáng để không chỉnh sửa mã.

+2

Một lựa chọn tốt nếu tôi không phải đọc mã của người khác ... – Oskar

+0

Ooh, tôi cảm thấy nỗi đau của bạn. Tôi đã thêm một số chi tiết cho câu trả lời của tôi. Ưu tiên của toán tử là trong VB6 help – MarkJ

+1

+1 cho lời khuyên, vì nó vẫn là lời khuyên tốt. Trên một mặt lưu ý, tôi không hiểu tại sao mọi người cố gắng nhồi nhét quá nhiều nhà khai thác vào một dòng mã duy nhất ở nơi đầu tiên. Đôi khi tôi muốn ngôn ngữ được định nghĩa * không * ưu tiên, để mọi người * có * sử dụng dấu ngoặc đơn để làm rõ những gì họ đang cố gắng thực hiện. Tôi đoán luôn có Lisp ... –

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