^ (Битовое XOR) в C ++ с логическим значением - PullRequest
0 голосов
/ 15 марта 2020

Я столкнулся с проблемой кода. После того, как я закончил, я посмотрел на другие ответы. Я видел ответ, который я изо всех сил пытаюсь понять.

#define CATCH_CONFIG_MAIN // This tells Catch to provide a main() - only do this in one cpp file
#include "catch.hpp"

bool willYou(bool young, bool beautiful, bool loved)
{
    return (young & beautiful) ^ loved;
}

TEST_CASE("willYou are computed", "[willYou]")
{
    REQUIRE(willYou(true, true, true) == false);
    REQUIRE(willYou(true, false, true) == true);
    REQUIRE(willYou(false, false, false) == false);
    REQUIRE(willYou(false, false, true) == true);
}

Если вам нужна информация, предоставленная для вызова (я не думаю, что она здесь необходима), то это она.

Once Mary heard a famous song, and a line from it stuck in her head. That line was "Will you still love me when I'm no longer young and beautiful?". Mary believes that a person is loved if and only if he/she is both young and beautiful, but this is quite a depressing thought, so she wants to put her belief to the test.

Knowing whether a person is young, beautiful and loved, find out if they contradict Mary's belief.

A person contradicts Mary's belief if one of the following statements is true:

they are young and beautiful but not loved;
they are loved but not young or not beautiful.
Example

For young = true, beautiful = true, and loved = true, the output should be
willYou(young, beautiful, loved) = false.

Young and beautiful people are loved according to Mary's belief.

For young = true, beautiful = false, and loved = true, the output should be
willYou(young, beautiful, loved) = true.

Mary doesn't believe that not beautiful people can be loved.

Input/Output

[execution time limit] 0.5 seconds (cpp)

[input] boolean young

[input] boolean beautiful

[input] boolean loved

[output] boolean

true if the person contradicts Mary's belief, false otherwise.

Что мне не удается gr asp, как оператор ^ используется здесь, чтобы получить желаемый логический результат? Я создал эти тесты, используя Catch2 . Начиная с GeeksForGeeks он просто заявляет ...

^ (битовое XOR) в C или C ++ принимает два числа в качестве операндов и делает XOR для каждого бита из двух чисел. Результат XOR равен 1, если два бита различны.

Ну, почти наверняка истина и ложь здесь будут 1 и 0. Так что то, что я предполагал в первом тестовом примере, вернет 1 или правда, но это ложь или 0? Если все верно, почему это ложно? Я понял, что история пытается объяснить это здесь. Но в истории говорится, что если ты молод и красив, то тебя любят. Я не уверен, неправильно ли я понимаю это утверждение, или это просто плохое объяснение (я начинаю думать, что это просто плохо). В любом случае, мне нужна помощь, чтобы попытаться понять этого оператора больше, и в основном gr asp, что все это значит. Я просто потерян здесь.

Ответы [ 2 ]

1 голос
/ 15 марта 2020

Я думаю, я понимаю, что вы пытаетесь спросить. Я видел раздел комментариев, пытающийся объяснить вам, что делает XOR, и это было довольно забавно. В любом случае,

Проблема состоит в том, что, по мнению Марии, «если вы молоды и красивы, вас любят» . Наша цель - противопоставить Марии и показать ей, что были времена, когда кого-то любили, но у него не было одного из двух или обоих качеств, ИЛИ , если у кого-то было таких качеств, но не любили.

В двух словах наша цель - противоречить ее убеждениям.

Вывод функции willYou() состоит в проверке , если мы можем противоречить Марии или нет. Возможно, вы могли бы решить этот вопрос, взяв в разных случаях и имея выход для каждого. Решение, упомянутое в вашем вопросе, является обобщенным c one.

Оператор XOR возвращает 1, если в выражении присутствует нечетное число 1. Например:

  1. , если young = 1 и beautiful = 1, их И равен 1, а их XOR с love = 1 равно 0 ( т.е. false) и, следовательно, это не не противоречит Мэри.
  2. , если young = 0 и beautiful = 1, их И равно 0, а их XOR с любимым = 1 равно 1 ( то есть true) и, следовательно, действительно противоречит Мэри.

Аналогично, это можно сформировать и для других случаев.

Решатель, должно быть, использовал свойство "passer / инвертор" XOR. Всякий раз, когда результаты были в пользу Мэри, он переворачивал ответ, давая нам false, означая, что мы не можем противоречить ей. Я думаю, что было бы легче сказать, что это просто творческое решение, сделанное кем-то, и, возможно, не ошеломляющая проблема (не пытаясь здесь вообще быть снисходительной).

0 голосов
/ 15 марта 2020

Используйте [in] операторы равенства ('==' как xnor и '! =' Как xor);

bool a, b;

...

bool c = a == b; // xnor

bool d = a! = B; // xor

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...