Eric Lippert's blog: Not Logical Is VBScript adresindeki soruma cevabı buldum. Kardeşleri gibi Not
işlecini kapatır, aslında bir boolean işleci değil. MSDN üzerinde
And
, Or
, Not
and Xor
are filed under Logical Operators.
Ama Eric Lippert Bitwise olarak etiketler ve mantıksal aslında çalışıyoruz nasıl söylemez çünkü benim gibi insanlar içine aptal böylece, MSDN'deki tıpkı mantıksal daha iyi bir açıklama var boolean operatörlerine sahip olmadıklarına inanıyorlar. Ve bu büyük bir tuzak.
Onları ne istersem sahip olmak için aşağıdaki gibi benim ifadeleri yeniden yazmak zorunda kalacak:
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"
Bu yes
ve olması gerektiği gibi daha sonra no
basar.
Güncelleme: Yukarıdaki durum bu durum için işe yarıyor gibi görünmekle birlikte, kesinlikle gitmek için bir yol değil. Sorun, kontrol etmek istediğimin ne olduğunu anlamaktır. Yukarıdaki kod açıklığa kavuşturmuyor. Bir bit karşılaştırması ve sonuçta 0'dan büyük bir sayısal karşılaştırma, bir boole denetimi ile eşdeğer değildir.
bu soruna nihai çözüm olarak Salman A'nın CBool
öneri benimser aşağıdaki kodu, düşünün:
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
Belirtilen bağlantının sözler bölümüne bakın, nerede yazdığını okuyun. Ayrıca, Not işleci herhangi bir değişkenin bit değerlerini tersine çevirir ve aşağıdaki tabloya göre sonuçta ilgili bit'i ayarlar ..._ Özet olarak, boolean işlenenler için bir boolean sonucu elde edersiniz, sayısal ifade için sayısal sonuç elde edersiniz. –
@SalmanA, bunu cevap olarak kabul ediyorum. Hatam 'Not' ile değil,' And' ile başladı ve çevreleyen 'Not' yüzünden boolean olacağını düşündüğümde sayısal bir sonuç verdi. – Lumi