Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Превратить эту логику "если-то" в логическое выражение?

Автор вопроса: EarlzОтветов: 4

У меня есть немного мозгов, чтобы сделать этот код более кратким (предпочтительно одно логическое выражение)

Это мой код:

                    if (d.Unemployed)
                    {
                        if (type.Unemployed)
                        {
                            tmp.Unemployed = true;
                        }
                        else
                        {
                            tmp.Unemployed = false;
                        }
                    }
                    else
                    {
                        if (type.Unemployed)
                        {
                            tmp.Unemployed = false;
                        }
                        else
                        {
                            tmp.Unemployed = true;
                        }
                    }

Суть в том, что если type или d не является безработным, то tmp должно быть установлено как не безработный.

  • Вы имеете в виду "type или d не безработный, но не оба"? svick 12.07.2011
  • @svick: Да, это подтверждается логикой if-else в коде. Justin ᚅᚔᚈᚄᚒᚔ 12.07.2011
  • @ Джастин, поэтому я и спросил. Ваш код говорит что-то другое, чем ваш текст, или, по крайней мере, неясно, что они означают одно и то же. svick 12.07.2011

binaryalgorithmboolean-logicbit-manipulation

Ответы

Ответ 1 · рейтинг 13 · MRAB

Как насчет:

tmp.Unemployed = type.Unemployed == d.Unemployed;

Ответ 2 · рейтинг 4 · Nick Dandoulakis

Если мы построим таблицу истинности, следуя коду, мы получим

d  | type | tmp
---+------+----
1  |   1  |  1
---+------+----
1  |   0  |  0
----+-----+----
0  |   1  |  0
----+-----+----
0  |   0  |  1

Вышеприведенное эквивалентно отрицанию операции xor.

tmp = not (d xor type)

Если в языке нет оператора xor, мы можем использовать != для логических значений.

tmp = ! (d != type);
// or
tmp = d == type;

Ответ 3 · рейтинг 2 · Paul.s

Размышляя о том, сколько "мозгового пердежа" это вызвало у вас, я бы подумал об использовании хорошо названной переменной, чтобы избежать повторения этого умственного процесса в будущем. Что-то вроде этого:

isTmpUnemployed = (type.Unemployed == d.Unemployed);
tmp.Unemployed = isTmpUnemployed;

Ответ 4 · Peter O.

Приведенный выше код означает "оба безработные или оба не безработные". Таким образом, не (A xor B):

 tmp.Unemployed = ! ( D.Unemployed ^ type.Unemployed)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы