2015-09-02 2 views
3

Как быстро выражение True And -1 оценивает на -1?Как оценивается выражение True And -1?

Я бы ожидал, что второй операнд (т. Е. -1) будет автоматически преобразован в True, и результатом будет True.

Я понимаю, что And интерпретируется здесь как бит-И-оператор. Но почему это так, когда первый операнд логичен и возможна логическая интерпретация?

+5

Измените параметр 'Option Strict On' и не заботитесь о странных преобразованиях. –

ответ

4

Вот как работает And Operator. Цитирую из документации:

Если операнды состоят из одного выражение булевой и одного числового выражения, Visual Basic преобразует выражение булеву в числовое значение (-1 для Истинного и 0 для False) и выполняет побитовое управление.

Почему это так? Мы можем только догадываться, но я подозреваю две причины:

  1. Обратная совместимость. VB6 и VBA также ведут себя так.

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

+0

По той же причине, что '' 9 "+ 5' оценивается как' 14', а не '' 95 "'? Это потому, что '&' в основном используется для конкатенации, а '+' в основном используется для добавления? – AlwaysLearning

+0

'" 9 "+ 5' оценивает только 14 * только * с' Option Strict' off! (и в некоторых случаях может привести к '' 95 "') @MeirGoldenberg – Plutonix

+0

@Plutonix: Я согласен с первой, но не со второй частью вашего утверждения: в документации явно указано, что '' 9 "+ 5' всегда будет yield '14' (Double), если опция Strict выключена: см. раздел« Примечания »в [+ Документация оператора] (https://msdn.microsoft.com/en-us/library/9c5t70w2.aspx). – Heinzi

Смежные вопросы