【问题标题】:Comparing Integers Using "And" in If Statements在 If 语句中使用“与”比较整数
【发布时间】:2011-07-11 15:36:29
【问题描述】:

这听起来可能很愚蠢,但我被困住了,我没有运气在互联网上搜索导致这种情况发生的原因。我有一个方法要检查以确保输入的两个整数都是正数:

    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) = 假
  • BothPositive(-10, 10) = True

这是为什么?比较语句中的操作顺序是怎么回事,或者试图比较的“与”是什么?我不明白为什么这行不通。

编辑:我了解如何解决,但我的问题是为什么会发生这种情况?我想知道是什么导致了这种情况。

【问题讨论】:

  • 我已经很久没有在 VB 中做任何事情了,但似乎 AND 并没有返回您期望的结果。为什么不直接If (num1 > 0) And (num2 > 0) Then

标签: vb.net if-statement comparison integer


【解决方案1】:

在 Vb.Net 中,And 表示按位运算符,因此您在这里所做的是创建一个值,它是 num1num2 的按位 AND 并将该值与 0 进行比较。你想要什么要做的是将每个值分别与 0 进行比较。尝试以下操作

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

注意这里使用AndAlso 而不是普通的旧AndAndAlso 是布尔运算符与按位运算符,也是短路的。你应该总是更喜欢它而不是And

【讨论】:

    【解决方案2】:

    And 是一个布尔运算,不会以您期望的方式处理整数(它是按位或)。你必须写成If num1 >0 And num2 > 0 Then...

    【讨论】:

    • 但是会发生什么?我知道如何解决它,但是如果我不能使用 And 比较整数,为什么我不会收到语法错误?
    • 它试图将整数解释为布尔值,vb.net 不会阻止你这样做,我相信 vb.net 除了 1 之外的每个整数都被解释为假。然后 And 的结果被解释为一个整数(True = 1, 0 = False)并与 0 进行比较;这就是你得到奇怪结果的方式。
    • 在 VB.NET 中,如果两个值是数字,它将执行按位与运算(因此它不会将它们解释为 True 和 False)。所以在这种情况下,它将返回一个整数,它是两个输入整数的按位与。
    【解决方案3】:
    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
    

    【讨论】:

    • 我知道如何解决它,但我的问题是为什么?我宁愿了解问题背后的原因,而不仅仅是“掩盖它”。
    • 正如 antlersoft 所说,您正在比较您的值是否存在。如果大于 0,则不是。
    • (num1 And num2) 将返回 TRUE 或 FALSE。 (0 或 1)
    • 如果数字相同,它将返回 True。如果数字不相同,则返回 False。没有语法错误。它是比较值,与正负无关。
    • 猜猜我的 VB 已经达不到标准了。对我来说,如果它们存在的话,应该返回一个真或假(1/0),不管里面的数字是多少。由于我已经过时,我将留给鹿角进一步解释。忽略我在 cmets 中所说的话(尽管我很确定我的代码有效)。
    猜你喜欢
    • 2018-03-29
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多