Sự khác nhau giữa các toán tử logic |
và ||
trong MATLAB là gì?Sự khác nhau giữa | và || trong MATLAB?
Trả lời
||
được sử dụng cho đầu vào vô hướng
|
có đầu vào mảng trong nếu/khi báo cáo
Từ source: -
Luôn sử dụng & & và || các toán tử khi yêu cầu đoản mạch. Sử dụng toán tử theo nguyên tố (& và |) để đoản mạch có thể cho kết quả không mong muốn.
Điều này không hoàn toàn chính xác. –
nhà khai thác logic
MATLAB cung cấp ba loại logic operators
và functions
:
|
là Element-khôn ngoan - hoạt động trên các yếu tố của mảng logic tương ứng.
Ví dụ: đầu vào vectorA
vàB
A = [0 1 1 0 1]; B = [1 1 0 0 1];
A | B = 11101
||
là ngắn mạch - hoạt động trên vô hướng, biểu thức logicVí dụ:
||
: Trả về logic 1 (true) nếu một trong hai đầu vào, hoặc cả hai, để đánh giá đúng, và hợp lý 0 (sai) nếu không.Toán hạng: biểu thức logic có chứa giá trị vô hướng.
A
||B
(B chỉ được đánh giá nếu A là sai)A = 1;
B = 0;
C =(A || (B = 1));
B
là0
sau khi biểu hiện này vàC is 1
.Khác, Bit-wise - hoạt động trên các bit tương ứng của các giá trị số nguyên hoặc mảng.
reference link
|
đại diện OR
như một logical operator.||
cũng là một toán tử logic được gọi là short-circuit OR
Lợi thế quan trọng nhất của các toán tử ngắn mạch là bạn có thể sử dụng chúng để đánh giá biểu thức chỉ khi một số điều kiện thỏa mãn. Ví dụ, bạn chỉ muốn thực hiện một hàm nếu tệp hàm nằm trên đường dẫn MATLAB hiện tại. Việc chập mạch giữ đoạn mã sau từ tạo ra một lỗi khi tập tin, myfun.m, không thể được tìm thấy:
comp = (exist('myfun.m') == 2) && (myfun(x) >= y)
Tương tự như vậy, tuyên bố này tránh cố gắng chia cho zero:
x = (b ~= 0) && (a/b > 18.5)
Bạn có thể cũng sử dụng các nhà khai thác &&
và ||
trong if
và while
báo cáo để tận dụng lợi thế của hành vi ngắn mạch của họ:
if (nargin >= 3) && (ischar(varargin{3}))
Điều này lặp lại thông tin được nêu trong câu hỏi. –
Tôi đang sử dụng mạng di động bị hoảng loạn và thậm chí không thấy câu trả lời nào khác. Ai đó có thể vui lòng định dạng mã trong bài đăng của tôi. – bonCodigo
Tuyệt vời Tôi đoán tôi phải tự mình làm điều đó. Đây là một bài đăng khác mà bạn có thể muốn xem. Tôi sẽ định dạng bài đăng khi tôi đi trước máy. http://stackoverflow.com/questions/1379415/whats-the-difference-between-and-in-matlab – bonCodigo
Tôi chắc chắn bạn đã đọc tài liệu cho số short-circuiting operators và cho số element-wise operators.
Một điểm khác biệt quan trọng là các toán tử khôn ngoan có thể hoạt động trên các mảng trong khi các toán tử mạch ngắn chỉ áp dụng cho các toán hạng logic vô hướng.
Nhưng có lẽ sự khác biệt chính là vấn đề đoản mạch. Đối với các toán tử mạch ngắn, biểu thức được đánh giá từ trái sang phải và ngay khi kết quả cuối cùng có thể được xác định chắc chắn, thì các thuật ngữ còn lại không được đánh giá.
Ví dụ, hãy xem xét
x = a && b
Nếu a
đánh giá để false
, sau đó chúng ta biết rằng a && b
đánh giá để false
không phụ thuộc vào những gì b
để đánh giá. Vì vậy, không cần đánh giá b
.
Bây giờ xem xét biểu thức này:
NeedToMakeExpensiveFunctionCall && ExpensiveFunctionCall
nơi chúng tôi tưởng tượng rằng ExpensiveFunctionCall
mất một thời gian dài để đánh giá. Nếu chúng tôi có thể thực hiện một số thử nghiệm khác, giá rẻ, cho phép chúng tôi bỏ qua cuộc gọi đến ExpensiveFunctionCall
, thì chúng tôi có thể tránh gọi ExpensiveFunctionCall.
Vì vậy, giả sử rằng NeedToMakeExpensiveFunctionCall
đánh giá là false
. Trong trường hợp đó, bởi vì chúng tôi đã sử dụng các toán tử mạch ngắn, nên ExpensiveFunctionCall
sẽ không được gọi.
Ngược lại, nếu chúng ta sử dụng các nhà điều hành yếu tố khôn ngoan và viết hàm như thế này:
NeedToMakeExpensiveFunctionCall & ExpensiveFunctionCall
sau đó cuộc gọi đến ExpensiveFunctionCall
sẽ không bao giờ được bỏ qua.
Trong thực tế, MATLAB documentation, mà tôi hy vọng bạn đã đọc, bao gồm một ví dụ tuyệt vời minh họa điểm rất tốt:
x = (b ~= 0) && (a/b > 18.5)
Trong trường hợp này chúng tôi không thể thực hiện a/b
nếu b
là zero.Do đó, kiểm tra cho b ~= 0
. Việc sử dụng toán tử mạch ngắn có nghĩa là chúng ta tránh tính toán a/b
khi b
bằng 0 và do đó tránh được lỗi thời gian chạy phát sinh. Rõ ràng toán tử logic-phần tử khôn ngoan sẽ không thể tránh được lỗi thời gian chạy.
Để có cuộc thảo luận dài hơn về đánh giá ngắn mạch, hãy tham khảo Wikipedia article về chủ đề này.
+1: Có thể cần lưu ý rằng '|' có thể hoạt động trên mảng quá, trong khi '||' chỉ trên vô hướng. Hơn nữa, [Loren Shure] (http://blogs.mathworks.com/loren/) chỉ ra [ở đây] (http://stackoverflow.com/a/1393606/1336150) rằng '|' có thể đoản mạch quá (!!), nhưng chỉ trong câu lệnh 'if' /' while'. –
Ngắn mạch ||
có nghĩa là các tham số đó sẽ chỉ được đánh giá nếu cần thiết trong biểu thức. Trong ví dụ của chúng tôi expr1 || expr2
nếu expr1
đánh giá là TRUE
, không cần đánh giá toán hạng thứ hai - kết quả sẽ luôn là TRUE
. Nếu bạn có một chuỗi dài các nhà khai thác ngắn mạch A || B || C || D
và đánh giá đầu tiên của bạn là đúng, thì những người khác sẽ không được đánh giá.
Nếu bạn thay thế hợp lý theo nguyên tắc |
thành A | B | C | D
thì tất cả các phần tử sẽ được đánh giá bất kể toán hạng trước đó.
- 1. Sự khác nhau giữa * và. * Trong MATLAB là gì?
- 2. Sự khác biệt giữa & và && trong MATLAB là gì?
- 3. Sự khác nhau giữa! = Và =! trong Java?
- 4. Sự khác nhau giữa `% trong%` và `== '
- 5. Sự khác nhau giữa ô và ma trận trong Matlab là gì?
- 6. Sự khác biệt giữa tập lệnh MATLAB và COMSOL?
- 7. Sự khác nhau giữa TVar và TMVar
- 8. Sự khác nhau giữa NoClassDefFoundError và ClassNotFoundException?
- 9. sự khác nhau giữa XSD và WSDL
- 10. Sự khác nhau giữa String.scan và String.split
- 11. Sự khác nhau giữa presentModalViewController và presentViewController?
- 12. Sự khác nhau giữa PyMODINIT_FUNC và PyModule_Create
- 13. Sự khác nhau giữa System.Web.Cache và HTTPContext.Curent.Cache
- 14. Sự khác nhau giữa onClickListener và onItemClickListener
- 15. Sự khác nhau giữa innodb_log_buffer_size và innodb_buffer_pool_size
- 16. Sự khác nhau giữa objectForKey và valueForKey?
- 17. Sự khác nhau giữa System.DateTime.Now và System.DateTime.Today
- 18. Sự khác nhau giữa installshield và windowsinstaller
- 19. Sự khác nhau giữa ParameterInfo.DefaultValue và ParameterInfo.RawDefaultValue
- 20. Sự khác nhau giữa NSInvocationOperation và NSBlockOperation
- 21. Sự khác nhau giữa unwrapObservable và()
- 22. Sự khác nhau giữa ListBox và ListView
- 23. Sự khác nhau giữa REST và WebServices
- 24. Sự khác nhau giữa C: và C:/
- 25. Sự khác nhau giữa restartLoader và onContentChanged
- 26. Sự khác nhau giữa DECIMAL và NUMERIC
- 27. Sự khác nhau giữa ViewFlipper và ViewSwitcher
- 28. Sự khác nhau giữa GIT và CVS
- 29. Sự khác nhau giữa sys và os.sys
- 30. Sự khác nhau giữa form_for và form_tag?
Hãy xem tài liệu: http://www.mathworks.co.uk/help/matlab/matlab_prog/operators.html#f0-38948. –
câu hỏi liên quan: [Sự khác nhau giữa & và && trong MATLAB là gì?] (Http://stackoverflow.com/questions/1379415/whats-the-difference-between-and-in-matlab) –