คำถามติดแท็ก operator-precedence

14
ฉันควรใช้วงเล็บในคำสั่งทางตรรกะแม้ว่าไม่จำเป็น?
สมมติว่าผมมีสภาพบูลีนa AND b OR c AND dและฉันใช้ภาษาที่มีการสั่งซื้อที่สูงขึ้นของแบบอย่างการดำเนินงานกว่าAND ORฉันสามารถเขียนรหัสบรรทัดนี้: If (a AND b) OR (c AND d) Then ... แต่จริงๆแล้วมันเทียบเท่ากับ: If a AND b OR c AND d Then ... มีข้อโต้แย้งใด ๆ ในหรือต่อต้านรวมถึงวงเล็บนอก? ประสบการณ์ภาคปฏิบัติแนะนำว่ามันคุ้มค่าหรือไม่ที่จะต้องอ่านให้เข้าใจ หรือมันเป็นสัญญาณว่านักพัฒนาต้องการนั่งลงและมั่นใจในพื้นฐานของภาษาของพวกเขา?

2
ทำไมผู้ประกอบการระดับบิตมีลำดับความสำคัญต่ำกว่าการเปรียบเทียบ?
ใครบางคนสามารถอธิบายเหตุผลได้ทำไมในภาษายอดนิยม (ดูหมายเหตุด้านล่าง) ตัวดำเนินการเปรียบเทียบ (==,! =, <,>, <=,> =) มีลำดับความสำคัญสูงกว่าตัวดำเนินการระดับบิต (&, |, ^ , ~)? ฉันไม่คิดว่าฉันเคยเจอการใช้งานที่สำคัญกว่านี้จะเป็นธรรมชาติ มันเป็นสิ่งที่ชอบเสมอ: if( (x & MASK) == CORRECT ) ... // Chosen bits are in correct setting, rest unimportant if( (x ^ x_prev) == SET ) // only, and exactly SET bit changed if( (x & …

3
ลำดับความสำคัญของฟังก์ชั่นในอัลกอริทึม Shunting-yard
ฉันกำลังทำงานผ่านอัลกอริทึม Shunting-yardดังที่วิกิพีเดียอธิบายไว้ คำอธิบายของอัลกอริทึมเมื่อจัดการกับตัวดำเนินการเป็นดังนี้: ถ้าโทเค็นเป็นตัวดำเนินการ o1 ดังนั้น: ในขณะที่มีโทเค็นของโอเปอเรเตอร์ o2 ที่ด้านบนสุดของโอเปอเรเตอร์สแต็กและอย่างใดอย่างหนึ่ง o1 is left-associative and its precedence is less than or equal to that of o2, or o1 is right associative, and has precedence less than that of o2, จากนั้นป๊อป o2 จากตัวดำเนินการสแต็กลงบนเอาต์พุตคิว กด o1 ลงบนสแต็กโอเปอเรเตอร์ อย่างไรก็ตามพวกเขาให้ตัวอย่างต่อไปนี้: การป้อนข้อมูล: sin max 2 3 / …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.