2011-07-11 5 views
4

Cela peut sembler stupide, mais je suis coincé et je n'ai aucune chance de chercher sur Internet ce qui causerait cela. J'ai une méthode que je veux vérifier pour vous assurer que les deux entiers entrés sont à la fois positifs:Comparer des entiers en utilisant "Et" dans les instructions If

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 

Maintenant, si je devais entrer des chiffres dans

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

Pourquoi est-ce? Qu'est-ce qui se passe avec l'ordre des opérations dans l'énoncé de comparaison ou qu'est-ce que le «Et» essaie de comparer? Je ne vois pas pourquoi cela ne marcherait pas.

EDIT: Je comprends comment travailler autour, mais ma question est pourquoi est ce survenant? Je veux savoir ce qui se passe qui cause cela.

+0

Cela fait longtemps que je n'ai rien fait dans VB, mais il semble que l'ET ne retourne pas ce que vous attendez. Pourquoi ne pas simplement faire si (num1> 0) Et (num2> 0) Then'? –

Répondre

6

En Vb.Net And représente un opérateur de bits si ce que vous faites ici est la création d'une valeur qui est le AND de num1 bitwise et num2 et comparer cette valeur à 0. Ce que vous voulez faire est de comparer chaque valeur individuellement contre 0. essayez ce qui suit

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

Notez l'utilisation de AndAlso ici au lieu de la vieille And plaine. Le AndAlso est un opérateur booléen par rapport à un bit et est également en court-circuit. Vous devriez presque toujours le préférer And

2

Et est une opération booléenne, et ne fonctionnera pas sur les entiers comme vous l'attendez (il fait un bit ou). Vous devez écrire cela comme If num1 >0 And num2 > 0 Then ...

+0

Mais que se passe-t-il à cause de cela? Je sais comment contourner cela mais pourquoi ne pas avoir une erreur de syntaxe si je ne peux pas comparer des nombres entiers en utilisant Et? –

+0

il essaie d'interpréter les entiers comme des booléens, ce que vb.net ne vous empêche pas de faire, et je crois en vb.net chaque entier sauf 1 est interprété comme faux. Alors le résultat du Et est interprété comme un entier (Vrai = 1, 0 = Faux) et comparé avec 0; Voilà comment vous obtenez les résultats étranges que vous obtenez. – antlersoft

+3

Dans VB.NET, il effectuera une opération And au niveau du bit si les deux valeurs sont numériques (il ne les interprétera donc pas comme True et False). Donc, dans ce cas, il retournera un entier qui est un bit Et des deux entiers d'entrée. –

1
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 
+0

Je comprends comment contourner cela mais ma question est pourquoi? Je préfère acquérir la compréhension derrière le problème plutôt que de simplement «couvrir». –

+0

Comme l'a dit Antlersoft, vous comparez si la valeur existe dans le vôtre. Pas si elle est supérieure à 0. – JClaspill

+0

(num1 et num2) retournera TRUE ou FALSE. (0 ou 1) – JClaspill

Questions connexes