2010-11-25 10 views
10

Ich bin mit einem bisschen alten VB6-Code arbeiten, so geht ...Was sind die Integer-Werte von Boolean False und True in VB6?

Dim STATUS As Integer 

STATUS = -1 

If (Not STATUS) Then 
' do something 
Else 
' do something else 
End If 

so war ich natürlich fragen, welcher Zweig dieses Code ausgeführt wird. Wer weiß also, was die numerischen Werte von True und False in VB6 sind?

+1

Die wirkliche Frage ist, warum benutzt der ursprüngliche Code überhaupt keine 'Boolean'? –

+0

@Cody Grey, das ist in der Tat eine gute Frage. –

+1

@Cody, @Brian Wenn der Code wirklich alt ist, kann es der Einführung von 'Boolean' in die Sprache vorausgehen. AFAICR 'Boolean' wurde in VB4 eingeführt. – MarkJ

Antwort

10

True wird als -1 und false als 0 gespeichert. Jeder Wert ungleich Null wird als wahr betrachtet.

Um zu sehen, warum es so überprüfen Sie bitte - http://www.vbforums.com/showthread.php?t=405047

+0

"Jeder Wert ungleich Null wird als wahr betrachtet" - warum dann? (55 = Wahr) 'Rückkehr' Falsch'? – onedaywhen

+0

Gute Frage und ich möchte die Antwort wissen - jemand? – Cidtek

+4

Ich bin nicht 100% sicher .. aber In diesem Fall wird 55 nicht in bool Wert konvertiert und vielleicht vergleicht es 55 und -1 um false zurück zu geben. Wenn Sie eine bool-Variable erstellen und ihr 55 zuweisen und dann vergleichen, ist das Ergebnis wahr. –

10

In VB 6 hat True einen numerischen Wert von -1. False hat einen numerischen Wert von 0.

Der Grund dafür ist, weil der -Datentyp als eine 16-Bit-Ganzzahl mit Vorzeichen gespeichert ist. Daher wird
-1 zu 16 1s im Binärformat ausgewertet (1111111111111111). False ist 16 0s (0000000000000000). Dies erzeugt die Beziehung, die während der Evolution von BASIC gehalten wurde: True = Not False.

+3

+1. Es ist auch wert zu wissen, dass VB6 'Not' immer der arithmetische Operator ist, es gibt keinen separaten logischen' Not'-Operator. Dank der Typenkorrektur können Sie 'Not' mit Booleschen Werten verwenden, als wäre es ein logischer Operator. – MarkJ

+0

Die Gründe werden in [diesem schönen Artikel aus dem Jahr 2001] (http://vb.mvps.org/tips/truth.asp) genauer erklärt – MarkJ

2

nicht wirklich eine Antwort, aber nur Stossen zu, tippte ich dies in unmittelbare Fenster, mit diesen Ergebnissen:

For x = -5 To 5 : ? x, CBool(x), (x = True), (x = False) : Next x 
-5   True   False   False 
-4   True   False   False 
-3   True   False   False 
-2   True   False   False 
-1   True   True   False 
0   False   False   True 
1   True   False   False 
2   True   False   False 
3   True   False   False 
4   True   False   False 
5   True   False   False 

(I mehr Werte getestet, aber nur -1 und 0 hatte etwas „interessant“ Der Rest war alles Wahr/Falsch/Falsch.) Also, empirisch würde ich sagen, dass der Vergleich arithmetisch durchgeführt wird, wenn Sie nicht mit CBool ​​casten. Warum? Ich kann nicht wirklich sagen ...

+0

danke dafür. Ich wusste nicht, dass man so etwas im unmittelbaren Fenster tun könnte. Ihre Ergebnisse bestätigen, was die anderen beiden Poster gesagt haben. –

+0

Die Unfähigkeit, das unmittelbare Fenster auf die gleiche Weise wie VB6 zu verwenden, irritiert mich fast täglich in VB.NET. –