【问题标题】:How do I use Xor in VB without using the built-in one?如何在VB中使用Xor而不使用内置的?
【发布时间】:2013-11-14 02:31:55
【问题描述】:

我想使用 Xor 而不使用 Visual Basic .NET 中的内置函数

异或描述:

它是逻辑和按位逻辑异或运算符。

如果两个表达式都为 True 或两个表达式都为 False,则返回 True;否则返回 False。

此运算符不执行短路,它总是计算两个表达式,并且此运算符没有短路对应项

这甚至可能吗?如果有,怎么做?

【问题讨论】:

  • “内置”有什么问题?
  • 我看不出这怎么可能。如果两个表达式都不计算两个表达式,它如何测试两个表达式是否计算为相同的布尔值?
  • 我只是想知道是否可以不使用内置的。
  • 你在“异或”描述下的描述是对异或的否定。 Xor 如果为 1,则返回 true,并且只有 1 个表达式为 True。

标签: vb.net function xor


【解决方案1】:

XOR 只是一个逻辑运算。如果你愿意,你可以用 NAND 完全替换它,因为 NAND 在功能上是完整的。

XOR 可能是

(a and not b) or (not a and b)

(a or b) and (not a or not b)

或者如果您根本不需要逻辑运算符...

If(a) Then
    If(not b) Then
        Return True
    End If
Else If(not a) Then
    If(b) Then
        Return True
    End If
End If
Return False

所以基本上,是的 - 我想有无数种方法可以做到这一点。但我想不出你为什么会想要。

【讨论】:

    【解决方案2】:

    我认为这个定义是不正确的。异或意味着只有一个表达式为真。该定义是 Exclusive NOR。

    无论如何

    XOR:
    (bool1 and not bool2) or (not bool1 and bool2)
    
    XNOR:
    (bool1 and bool2) or (not bool1 and not bool2)
    

    或者干脆

    bool1 = bool2
    

    【讨论】:

      【解决方案3】:

      正如其他人所指出的,XOR 的定义是不正确的。 XOR 只是没有进位的加法。

          Dim b1 As Boolean = False
          Dim b2 As Boolean = False
      
          For x As Integer = 1 To 2
              For y As Integer = 1 To 2
                  Dim n1 As Integer = CInt(b1)
                  Dim n2 As Integer = CInt(b2)
                  Dim ans As Boolean = CBool((n1 + n2) And 1) 'add, ignore carries
                  Debug.WriteLine("b1 {0}  b2 {1}   ans {2}", b1, b2, ans)
                  b2 = Not b2
              Next
              b1 = Not b1
          Next
      

      【讨论】:

        【解决方案4】:

        Dim val1, val2 As Boolean If Val1 <> Val2 Return False Else Return True End If

        '那是 XNOR

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-22
          • 1970-01-01
          相关资源
          最近更新 更多