Ich habe die Antwort auf meine Frage auf Eric Lippert's blog: Not Logical Is VBScript gefunden. Stellt sich heraus, Not
Betreiber, wie seine Brüder, ist nicht wirklich ein booleschen Operator.
And
, Or
, Not
and Xor
are filed under Logical Operators auf MSDN.
Aber Eric Lippert kennzeichnet sie als bitweise, und das ist eine bessere Beschreibung als nur logische wie auf MSDN, weil logische nicht sagt, wie sie tatsächlich arbeiten, so Leute wie mich in getäuscht werden zu glauben, sie sind boolean Betreiber, die sie nicht sind. Und das ist eine große Falle.
müsste ich meine Aussagen zu umschreiben, wie um sie, was zu tun zu haben, folgt Ich möchte:
If (1 And 3) > 0 Then WScript.Echo "yes" Else WScript.Echo "no"
If Not((1 And 3) > 0) Then WScript.Echo "yes" Else WScript.Echo "no"
Dieser druckt yes
und dann no
wie es sollte.
Update: Während das oben für diesen Fall scheint, ist es definitiv nicht der Weg zu gehen. Das Problem besteht darin zu verstehen, wonach ich suchen möchte. Der obige Code macht es nicht klar. Ein bitweiser Vergleich und ein numerischer Vergleich für mehr als 0 im Ergebnis sind nicht äquivalent zu einer booleschen Prüfung.
Betrachten Sie den folgenden Code, der für dieses Problem CBool
Vorschlag als die endgültige Lösung Salman A des annimmt:
Option Explicit
Dim a, b
a = -3 : b = -2
If a And b Then WScript.Echo "ja" Else WScript.Echo "nein" ' bad
If (a And b) > 0 Then WScript.Echo "ja" Else WScript.Echo "nein" ' bad
If CBool(a And b) Then WScript.Echo "ja" Else WScript.Echo "nein" ' good
Sehen Sie sich den Abschnitt Anmerkungen des von Ihnen erwähnten Links an, lesen Sie dort, wo _ Der Operator Not die Bitwerte einer beliebigen Variablen invertiert und das entsprechende Bit im Ergebnis gemäß der folgenden Tabelle setzt ... Für boolesche Operanden erhalten Sie ein Boolesches Ergebnis, für einen numerischen Ausdruck erhalten Sie ein numerisches Ergebnis. –
@SalmanA, setzen Sie es als Antwort, damit ich es akzeptieren kann. Mein Fehler begann nicht mit "Not", sondern mit "And", was zu einem numerischen Ergebnis führt, während ich dachte, dass es wegen des umgebenden "Not" boolesch wäre. – Lumi