2008-08-06 95 views
16

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ì?

+0

[Ư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

+0

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. –

+0

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

Trả lời

21

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

+1

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

8

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
  • 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.

5

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

4

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. ..

+0

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 –

1

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.

5

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; 
0

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.

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