Microsoft любит ложное значение лучше? - PullRequest
4 голосов
/ 11 февраля 2012

Я читаю книгу Джона Скита. (# 4)

но одна вещь (среди прочих) привлекла мое внимание:

тема: bool?

он написал в таблице, что: (X, Y - это bool?)

X      |    Y     |   X & Y
---------------------------
true        null       null

хорошо, хорошо ... так что ноль - это тот, кто решает. операнд bool здесь проигрывает.

X      |    Y     |   X & Y
---------------------------
false      null       false

почему? почему здесь учитывается булевый операнд, в то время как в предыдущем примере результат был нулевым ...?

Кажется, что у истины и лжи есть друзья в разных местах .... :)

Ответы [ 5 ]

10 голосов
/ 11 февраля 2012

Произнести null как unknown .

true  & unknown => unknown
false & unknown => false       because the second operand does not matter. 

И, конечно, есть зеркальная таблица для ИЛИ:

true  | unknown => true        because the second operand does not matter. 
false | unknown => unknown       

И она также справедлива для && и ||.

3 голосов
/ 11 февраля 2012

Причина, по которой он был разработан таким образом, заключается в том, чтобы соответствовать трехзначной логике , реализованной во многих других платформах, включая SQL.В логике Клини (на которой основана трехзначная логика) TRUE AND UNKNOWN дает UNKNOWN, а FALSE AND UNKNOWN дает FALSE.

. Вы можете обратиться к разделу « bool».?введите ”в Использование Nullable Types (Руководство по программированию в C #) для объяснения и перечисления результатов в C #.

1 голос
/ 12 февраля 2012

Причина в том, что вы сейчас имеете дело с трехзначной логикой .

  • для оператора AND (будь то & или &&) результат выражения может быть определен при первом совпадении для FALSE.
  • для оператора ИЛИ (будь то | или ||) результат выражения может быть определен при первом совпадении для ИСТИНА.
  • для любой логической операции, имеющей самый левый операнд NULL, вернется NULL.

Таким образом, таблицы, которые вы перечислили, являются неполными: вам нужно больше записей, чтобы увидеть, что произойдет, когда есть 8 возможных комбинаций ввода (девять, если вы считаете комбинацию null operator null).

И

X      |    Y     |   X & Y
---------------------------
true       null        null
null       true        null
false      null       false
null       false       null

true       false      false
true       true        true
false      true       false
false      false      false

OR

X      |    Y     |   X | Y
---------------------------
true       null        true
null       true        null
false      null        null
null       false       null

true       false       true
true       true        true
false      true        true
false      false      false

Используя вашу friends аналогию, вы могли бы сказать, что для трехзначной логики AND предпочитает FALSE и NULL в качестве результата, тогда как OR предпочитает TRUE и NULL.

1 голос
/ 11 февраля 2012

Согласно Microsoft, это ...

Чтобы гарантировать, что результаты, полученные с помощью & и |операторы согласуются с трехзначным логическим типом в SQL

Таблицу истинности для побитовых операций над логическими значениями, допускающими обнуляемость, можно найти на этой странице .

0 голосов
/ 11 февраля 2012

&& и ||оба оператора оцениваются в соответствии с оценкой короткого замыкания .Это означает, что как только сложное выражение будет определено как ложное, остальные выражения не будут проверяться.Поскольку ложного значения во втором выражении достаточно для определения результата логического И, результат определяется как ложный напрямую.

...