ANSWER: C,D
1.b++ && b == a evaluates to FALSE because b is incremented after its value is used, resulting in 0 && 1, which is 0.
2.b++ && a == 0 also evaluates to FALSE because b becomes 1, and a is not 0, resulting in 1 && 0, which is 0.
3.a || b == --a evaluates to TRUE because a is 1 and --a decrements a to 0, resulting in 1 || 0, which is 1.
4.a || ++b == 0 evaluates to TRUE because a is 1 and ++b increments b to 2, resulting in 1 || 0, which is 1.
Short-circuit evaluation skips evaluating the right operand of && or || if the result can be determined by the left operand, optimizing execution.