2016-05-03 13 views
2

Kann mir jemand helfen, diese Logik in VBA schnell zu verstehen. Ich bin gerade dabei, einen Code zu debuggen, und er enthält Bedingungen mit AND-Operanden wie unten.Und Operator in VBA

a und werden numerische Werte zugewiesen und der Vergleich gibt einen numerischen Wert zurück. Ich möchte nur wissen, wie man diese Art von Logik mit Hilfe eines Operators liest. Ich bin vertraut, wenn die Bedingung gewesen wäre, wenn (a> 5 und b < 5).

Vielen Dank im Voraus.

+0

Wenn 'a' oder' b' numerisch sind, dann sind sie, wenn sie Null sind, standardmäßig auf 'False' gesetzt, ansonsten auf' True'. – ja72

+1

Siehe [https://msdn.microsoft.com/en-us/library/office/gg251591.aspx]. Wenn beide Operanden numerisch sind, führt "And" einen bitweisen Vergleich durch. –

Antwort

-2

Obwohl a und b numerisch sind, werden sie wegen des Vergleichs "und" als Boolean verwendet. Wenn der numerische Wert 0 ist, wird er in FALSE konvertiert. Sonst wird es für jeden Wert ungleich Null als TRUE

behandelt. Daher wird die obige Bedingung nur als WAHR ausgewertet, wenn sowohl a als auch b nicht Null sind.

Sie können einem booleschen Wert tatsächlich einen numerischen Wert zuweisen, um dies zu testen, z.

Sub test() 
Dim a As Integer 
Dim abool As Boolean 

    a = 1 
    abool = a 
    MsgBox ("a:" & a & " abool:" & abool) 

End Sub 

Im obigen Beispiel erhalten Sie als Ergebnis "a: 1 abool: True".

+0

Nicht wahr. 'und' mit ganzen Zahlen macht eine bitweise Übereinstimmung –

3

Es ist ein Bitweiser Vergleich. Wenn a und b Aktien keine gemeinsame Bits auf dann (a and b) <> 0 kehrt TRUE

ZB wenn a = 5 = 0101 und b = 6 = 0110 dann a and b = 0100 = 4

0

nicht mehr des Codes hat, scheint dies ein Vergleich zweier Einstellungen sein.

Bitbasierte Felder werden oft verwendet, um Flags/Einstellungen zu verfolgen. Obwohl die Anzahl begrenzt ist (abhängig von der Größe der ganzen Zahlen in Ihrer Architektur), ermöglicht es eine schnelle Manipulation und Tests.

Also, wenn a0101 ist, hält es mehrere Flags (Bit basierte Zahlen von rechts beginnen)

Flag 1 (1st bit) = On 
Flag 2 (2nd bit) = Off 
Flag 3 (3rd bit) = On 
Flag 4 (4th bit) = Off 

Angenommen, Sie eine andere Variable haben, b, die auch Fahnen

Flag 1 (1st bit) = Off (different than a) 
Flag 2 (2nd bit) = Off 
Flag 3 (3rd bit) = On 
Flag 4 (4th bit) = On (different than a) 
halten

Sie können sie schnell mit bitweisen Operationen vergleichen:

if (a and b) = 0101 and 1100 = 0100 = common flags 
if (a or b) = 0101 or 1100 = 1101 = all flags across both variable