Можно ли упростить следующее выражение? - PullRequest
0 голосов
/ 01 марта 2012

Можно ли упростить следующее выражение?

(M == null && C == null) ||
(M != null && C != null && D == C)

Математически я знаю, что это нельзя упростить, и я проверил WolframAlpha, чтобы подтвердить это, но мне было интересно, возможно ли это сделать с использованием одного из логических логических операторов (&, |, ^), чтобы сделать это состояние короче. Я пытался придумать способы, но у меня есть умственный блок ... возможно ли это сократить?

Ответы [ 4 ]

2 голосов
/ 01 марта 2012

Нет, его нельзя сократить.

Как заметил Фердинанд Лю, ваше выражение верно в двух случаях:

  • Оба M и C равны нулюили
  • И M, и C равны , а не ноль, а C и D равны.

Вам необходимо проверитьи M, и C в обоих условиях, поэтому вы не можете упростить выражение.


Интересное, но немного связанное примечание:

Если вам не нужночтобы проверить C и D на равенство, тогда выражение будет

(M != null && C != null) || (M == null && C == null)

, и это можно можно упростить до

!((M == null) ^ (C == null))

, что вернокогда M и C имеют одинаковую "пустоту".

2 голосов
/ 01 марта 2012

Предлагаемое выражение верно для 2 «правил»: Правило № 1: и M, и C равны нулю, независимо от значения D Правило № 2: (2.a: и M, и C НЕ являются нулевыми) И (2.b: D равно C)

Формула Шингецу потерпит неудачу, если D равно нулю (означает C == null, это нарушает правило # 2a)

Неудачный тест: M = не (ноль), C = ноль, D = ноль

(M == null && C == null) || (M != null && D == C)
false && true || true && true    
false || true
true

Хотя первоначальное предложенное выражение Джейка будет проанализировано как:

(M == null && C == null) || (M != null && C != null && D == C)
false && true || (true && false && true)
false || false
false

J. Формула Бруни потерпит неудачу в случае M или C! = Null (нарушено условие 1 или 2a) Неудачный тест: M = не (ноль), C = ноль, D = ноль

((M == null) && (C == null)) || (D == C)
false && true || true
false || true
true
0 голосов
/ 01 марта 2012

(M == ноль && C == ноль) ||(M! = Null && D == C)
Это можно сделать, потому что из того, что я вижу в вашем коде, D определенно имеет значение, поэтому C не будет == для D, если оно равно нулю.

0 голосов
/ 01 марта 2012

Если вы предполагаете, что D не нуль, то во втором выражении вы можете опустить C! == ноль.

...