Контекст:
Я изучаю С# и занимаюсь на Pex для удовольствия. На сайте вам предстоит повторить реализацию секретного алгоритма, набрав код на сайт и изучив, как входы и выходы различаются между вашей реализацией и секретной реализацией.
Проблема:
В любом случае, я застрял на базовом кодовом дуэли под названием XAndY.
От имени казалось очевидным, что ответ был просто:
public static bool Puzzle(bool x, bool y)
{
return x && y;
}
Однако это было неверно, и Pex сообщил мне, что следующие материалы дали другой результат, чем секретная реализация:
Input:
x: true y: true (0x02)
Вывод:
моя реализация: true (0x02)
секретная реализация: false
Несоответствие Ваш метод головоломки вызвал неправильный результат.
код: Головоломка (true, PexSafeHelpers.ByteToBoolean((байт) 2));
После много путаницы, пытающейся сравнить разные типы истинности, я понял, что реализация, которую искал Pex, на самом деле просто использовала побитовое AND:
return x & y;
Вопросы:
Я думал, что для семантических и коротких замыканий вы должны использовать логический &&
для сравнения логических значений, но независимо:
- Означает ли это, что
x & y
иx && y
окончательно выполняют не одинаковые выходы для всех возможных аргументов bool? (или это может быть что-то плохое в Pex?) - Означает ли это, что вы можете различать разные значения bool
true
в С#? Если да, то как?