BODMAS là gì và tại sao nó hữu ích trong lập trình?Thuật ngữ "BODMAS" có nghĩa là gì?
Trả lời
http://www.easymaths.com/What_on_earth_is_Bodmas.htm:
Bạn nghĩ gì câu trả lời cho 2 + 3 x 5 là?
Có phải (2 + 3) x 5 = 5 x 5 = 25 không?
hoặc 2 + (3 x 5) = 2 + 15 = 17?
BODMAS có thể đến giải cứu và cho chúng ta quy tắc để làm theo để chúng tôi luôn nhận được câu trả lời đúng:
(B) vợt (O) rder (D) ivision (M) ultiplication (A) ddition (S) ubtraction
Theo BODMAS, phép nhân nên luôn được thực hiện trước khi bổ sung, do đó 17 thực sự là câu trả lời đúng theo BODMAS và cũng sẽ là câu trả lời mà máy tính của bạn sẽ cung cấp nếu bạn nhập 2 + 3 x 5.
Tại sao lại hữu ích trong lập trình? Không có ý tưởng, nhưng tôi giả sử đó là bởi vì bạn có thể thoát khỏi một số dấu ngoặc? Tôi là một lập trình viên khá tự vệ, rất đường của tôi có thể trông như thế này:
result = (((i + 4) - (a + b)) * MAGIC_NUMBER) - ANOTHER_MAGIC_NUMBER;
với BODMAS bạn có thể làm điều này một chút rõ ràng hơn:
result = (i + 4 - (a + b)) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;
Tôi nghĩ rằng tôi vẫn muốn sử dụng phiên bản đầu tiên - nhiều dấu ngoặc hơn, nhưng theo cách đó tôi không phải học thêm một quy tắc nào khác và tôi gặp ít rủi ro hơn khi quên nó và gây ra những lỗi khó sửa lỗi lạ?
Chỉ cần đoán ở phần đó.
Mike Stone EDIT: Cố định toán học như Gaius chỉ ra
Thành thật mà nói, tôi với phong cách "lợ" của bạn, thay vì phiên bản được cho là tối ưu. Có lẽ đó chỉ là tôi, nhưng tôi tìm thấy> kết quả = ((((i + 4) - (a + b)) * MAGIC_NUMBER) - ANOTHER_MAGIC_NUMBER; dễ dàng hơn để phân tích tinh thần ... – ZombieSheep
Một phiên bản của này (trong trường trung học) được "Xin Xin lỗi My Dear dì Sally".
- ngoặc
- mũ
- Nhân
- Division
- Addition
- Trừ
Các thiết bị ghi nhớ là hữu ích trong việc học, và vẫn còn hữu ích trong chương trình ngày hôm nay.
Trình tự hoạt động trong một biểu thức, chẳng hạn như:
foo * (bar + baz^2/foo)
- B vợt đầu tiên
- O rders (tức Quyền hạn và Roots Square, vv)
- D ivision và M ultiplication (từ trái sang phải)
- Một ddition và S ubtraction (trái sang phải)
nguồn: http://www.mathsisfun.com/operation-order-bodmas.html
Khi tôi học được điều này ở trường phổ thông (ở Canada), nó được gọi là BEDMAS:
B vợt
E xponents
D ivision
M ultiplication
Một ddition
S ubtraction
Chỉ cần cho những người từ khu vực này của thế giới. ..
Tương tự như vậy ở đây ở New Zealand. 'Số mũ' có ý nghĩa hơn với tôi so với 'Thứ tự' có tên chung chung –
Tôi không thực sự chắc chắn làm thế nào áp dụng cho việc lập trình cũ BODMAS mnemonic là anyways. Không có sự bảo đảm về trật tự hoạt động giữa các ngôn ngữ, và trong khi nhiều người giữ các hoạt động tiêu chuẩn theo thứ tự đó, không phải tất cả đều làm. Và sau đó có một số ngôn ngữ mà thứ tự của các hoạt động không thực sự là tất cả những gì có ý nghĩa (ví dụ như tiếng địa phương của Lisp). Theo cách nào đó, bạn có thể tốt hơn để lập trình nếu bạn quên thứ tự chuẩn và sử dụng dấu ngoặc đơn cho mọi thứ (ví dụ: (a * b) + c) hoặc tìm hiểu thứ tự cho mỗi ngôn ngữ bạn làm việc.
Tôi không có quyền chỉnh sửa @Michael Stum's answer, nhưng nó không hoàn toàn chính xác. Ông giảm
(i + 4) - (a + b)
để
(i + 4 - a + b)
Họ không phải là tương đương. Việc giảm tốt nhất mà tôi có thể nhận được cho toàn bộ biểu thức là
((i + 4) - (a + b)) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;
hoặc
(i + 4 - a - b) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;
Tôi đọc ở đâu đó rằng đặc biệt là trong C/C++ tách biểu thức của bạn vào báo cáo nhỏ là tốt hơn để tối ưu hóa; vì vậy thay vì viết các biểu thức cực kỳ phức tạp trong một dòng, bạn lưu các phần vào các biến và thực hiện từng bước theo từng bước, sau đó xây dựng chúng theo cách bạn thực hiện.
Các thói quen tối ưu hóa sẽ sử dụng thanh ghi ở những nơi bạn có các biến để nó không ảnh hưởng đến không gian nhưng nó có thể giúp trình biên dịch một chút.
- 1. Thuật ngữ "Tổng hợp Verilog" có nghĩa là gì?
- 2. Thuật ngữ "lexical" có nghĩa là gì trong C++?
- 3. Thuật ngữ "chặn" có nghĩa là gì trong lập trình?
- 4. Thuật ngữ "thuật ngữ vector" là gì?
- 5. 'Ngôn ngữ xây dựng' có nghĩa là gì?
- 6. "Từ ... nhập ..." có nghĩa là gì trong các thuật ngữ đầu xương đơn giản?
- 7. Thuật ngữ "vendoring" hoặc "to vendor" có nghĩa là gì đối với Ruby on Rails?
- 8. Thuật ngữ Plain Old Java Object (POJO) có nghĩa là gì?
- 9. Trong thuật ngữ laymans, 'tĩnh' có nghĩa là gì trong Java?
- 10. Thuật ngữ cơ sở dữ liệu cũ có nghĩa là gì?
- 11. Ngữ cảnh lối ra có nghĩa là gì đối với WaitHandle.WaitOne nghĩa là gì?
- 12. "Ngữ nghĩa chính thức" là gì?
- 13. Ngữ nghĩa của withValueBackReference là gì?
- 14. "Ngôn ngữ chính" nghĩa là gì?
- 15. Thuật ngữ "biểu mẫu chuẩn" hoặc "biểu diễn chuẩn" trong Java nghĩa là gì?
- 16. 'Hạt giống' có nghĩa là gì?
- 17. Thuật ngữ kỹ thuật cho ngôn ngữ loại C# hoặc Java là gì?
- 18. Chữ "Instrumentation" có nghĩa là gì?
- 19. /([^.]*)\.(.*)/ có nghĩa là gì?
- 20. "\\. \", "\ ?? \", "\\? \", "\\" có nghĩa là gì?
- 21. {} có nghĩa là gì?
- 22. = * có nghĩa là gì?
- 23. Có nghĩa là gì?
- 24. JPanel nói là mờ đục có nghĩa là gì?
- 25. Thuật ngữ chính xác cho ->, -> * và. * Là gì?
- 26. "api công khai" có nghĩa là gì trong Phiên bản ngữ nghĩa?
- 27. Thuật ngữ CSS: chúng được gọi là gì?
- 28. Phụ thuộc máy 'có nghĩa là gì'?
- 29. "cv-unqualified" có nghĩa là gì trong C++?
- 30. "Vùng chứa" có nghĩa là gì trong ngữ cảnh lập trình?
[Ưu tiên toán tử trong C và C++] (http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence) – foxy
Tôi thường sử dụng khoảng trắng để hiển thị thứ tự các phép toán trên bốn + -/* hoạt động, như thế này: a + b * c Đối với tất cả các toán tử khác, tôi sử dụng dấu ngoặc đơn để làm cho thứ tự các thao tác rõ ràng. –
Tôi chưa từng thấy BODMAS trước ngày hôm nay. Tôi đã học PEMDAS (Parens, Exponents, Multiplication, Division, Addition, Subtraction). – FishBasketGordo