2013-08-28 39 views
0

我想用異或不使用內置的一個Visual Basic .NET中如何在不使用內置的VB中使用Xor?

異或描述:

這是合乎邏輯的,以及按位邏輯異或運算符。

如果兩個表達式均爲True或兩個表達式均爲False,則返回True;否則返回False。

這個操作符不執行短路,它總是會評估表達式並沒有該運營商

沒有短路對應的是這甚至可能嗎?如果是這樣,怎麼樣?

+2

哪些錯誤的 「內置一個」? – Magnus

+0

我看不出這將是怎麼可能的。如果兩個表達式都不計算這兩個表達式,它如何測試這兩個表達式是否計算爲相同的布爾值? – tinstaafl

+0

我只想知道是否有可能不使用內置的。 –

回答

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 

因此,基本上,是的 - 我想象有很多方法可以做到這一點。但我想不出爲什麼你會想要。

0

我認爲這個定義是不正確的。 「異或」表示只有一個表達式是真實的。該定義是Exclusive NOR。

但無論如何

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

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

甚至乾脆

bool1 = bool2 
+0

所以基本上這就是XOR所做的事情? http://pastebin.com/raw.php?i=BxcAvJJn –

0

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 
0

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

「這是XNOR