แม้ว่าจะมีคำตอบที่ดีอยู่แล้ว แต่ฉันคิดว่าวิธีนี้อาจจะง่ายกว่าสำหรับผู้ที่เพิ่งเริ่มใช้พีชคณิตแบบบูลเพื่อประเมินตารางความจริง
สิ่งแรกที่คุณต้องการทำคือดูภายใต้เงื่อนไขที่คุณต้องการดำเนินการ C. กรณีนี้คือเมื่อ(a & b)
ใด !a
นอกจากนี้เมื่อ (a & b) | !a
ดังนั้นคุณต้อง
หากคุณต้องการย่อเล็กสุดคุณสามารถไปต่อได้ เช่นเดียวกับในเลขคณิต "ปกติ" คุณสามารถคูณออกมาได้
(a & b) | !a = (a | !a) & (b | !a)
. a | ! b | !a
เป็นจริงเสมอดังนั้นคุณก็สามารถข้ามมันออกมาซึ่งใบคุณมีผลลดลงไปนี้: ในกรณีที่คำสั่งซื้อสร้างความแตกต่างเนื่องจากคุณต้องการตรวจสอบ b เฉพาะในกรณีที่! a เป็นจริง (เช่นเมื่อ! a คือการตรวจสอบ nullpointer และ b เป็นการดำเนินการบนตัวชี้เช่น @ LordFarquaad ชี้ให้เห็นในความคิดเห็นของเขา) คุณอาจ ต้องการสลับทั้งสอง
อีกกรณีหนึ่ง (/ * ... * /) จะถูกดำเนินการเสมอเมื่อไม่ดำเนินการ c ดังนั้นเราสามารถใส่ไว้ในอีกกรณีหนึ่งได้
ด้วยมูลค่าการกล่าวขวัญว่ามันอาจทำให้รู้สึกทั้งสองวิธีที่จะนำการกระทำ c เป็นวิธีการ
ซึ่งทำให้เรามีรหัสต่อไปนี้:
if (!A || B)
{
doActionC() // execute method which does action C
}
else
{
/* ... */ // what ever happens here, you might want to put it into a method, too.
}
วิธีนี้คุณยังสามารถลดข้อกำหนดด้วยตัวถูกดำเนินการมากขึ้นซึ่งจะน่าเกลียดด้วยตารางความจริงอย่างรวดเร็ว อีกวิธีที่ดีคือแผนที่ Karnaugh แต่ตอนนี้ฉันจะไม่ลงลึกไปกว่านี้