Сравнение целых чисел с использованием «И» в операторах If - PullRequest
4 голосов
/ 11 июля 2011

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

    Public Function BothPositive(ByVal num1 As Integer, ByVal num2 As Integer) As Boolean
    If (num1 And num2) > 0 Then
        Return True
    Else
        Return False
    End If
End Function

Теперь, если бы мне нужно было ввести некоторые числа в

  • BothPositive (1,1) = True
  • BothPositive (1,2) = False
  • BothPositive (-10, 10) = True

Почемуэто?Что происходит с порядком операций в операторе сравнения или что пытается сравнить «И»?Я не понимаю, почему это не сработает.

РЕДАКТИРОВАТЬ: Я понимаю, как обойти, но мой вопрос Почему это происходит?Я хочу знать, что происходит, что вызывает это.

Ответы [ 3 ]

6 голосов
/ 11 июля 2011

В Vb.Net And представляет побитовый оператор, поэтому вы здесь создаете значение, которое является побитовым AND из num1 и num2, и сравниваете это значение с 0. То, что вы хотите чтобы сделать это сравнить каждое значение отдельно от 0. попробуйте следующее

If (num1 > 0) AndAlso (num2 > 0) Then

Обратите внимание на использование AndAlso здесь вместо простого старого And. AndAlso является логическим оператором против побитового и также является коротким замыканием. Вы должны почти всегда предпочитать это по And

2 голосов
/ 11 июля 2011

И это логическая операция, которая не будет работать с целыми числами так, как вы ожидаете (она выполняется поразрядно или). Вы должны написать это как If num1 >0 And num2 > 0 Then ...

1 голос
/ 11 июля 2011
Public Function BothPositive(ByVal num1 As Integer, ByVal num2 As Integer) As Boolean    
 If (num1 > 0 AND num2 > 0) Then
  Return True
 Else
  Return False
 End If
End Function
...