2017-08-08 1 views
-1

Ich verstehe diese Logik nicht mit VB.Was ist der Zweck dieser If-Anweisungen mit bedingter Logik?

'If (ahora and Turnos.DESAYUNO) <> 0 then returns Turnos.DESAYUNO 

Meine Fragen ist, warum (ahora Und Turnos.DESAYUNO))

Enum Turnos 
    Ninguno = 0  'nothing the constant is =  0 
    Desayuno = &H380 'breakfast the constant is =  896 
    comida = &H1E000 'lunch  the constant is = 122888 
    Cena = &HE00003 'dinner  the constant is = 14680067 
end Enum 

Sub Main() 
    Console.WriteLine("Es la hora {0:hh:mm:ss tt}", DateTime.Now) 
    Console.WriteLine("Turno: {0:G}", QuéTurnoEsAhora()) 
    Console.ReadKey() 
End Sub 

Public Function QuéTurnoEsAhora() As Turnos 
    Dim ahora As Integer = CInt(Math.Pow(2, DateTime.Now.Hour)) 
    If (ahora And Turnos.DESAYUNO) <> 0 Then Return Turnos.DESAYUNO 
    If (ahora And Turnos.COMIDA) <> 0 Then Return Turnos.COMIDA 
    If (ahora And Turnos.CENA) <> 0 Then Return Turnos.CENA 
    Return Turnos.NINGUNO 
End Function 

Bei Verwendung der folgenden Funktion ist <> 0 ??: Ich habe ein Beispiel mit einer konstanten gesehen Und die nächste Funktion

'If (ahora And Turnos.COMIDA) = 0' 

Es tut mir leid, ich verstehe nicht, welche Logik ist. Könnte mir jemand helfen?

+1

Warum verwenden Sie 'Math.Pow'? – Ares

+0

Anstatt nach einem Tutorial über Code zu fragen, verstehst du nicht, warum erklärst du nicht * was * du versuchst zu tun? – Plutonix

+0

Ihre Struktur '& H ...' ist NICHT korrekt :) – Codexer

Antwort

1

Jeder Ihrer Konstanten in der Enum eine Bitmaske ist, die nach dem Essen mit bestimmten Stunden des Tages überlappen, die gegessen werden sollen.

Zum Beispiel hat Frühstück, das einen Hexadezimalwert von 380 und Dezimalwert von 896 hat, einen Binärwert von (24 Bit) 00000000000000001110000000. Zählen von der niedrigstwertigen und beginnend bei Null, die 7., 8. und 9. Bits sind hoch. Wie in einer anderen Antwort erwähnt, wird ein bitweises und verwendet, um die aktuelle Stunde mit diesem Wert zu maskieren. Das Ergebnis ist 1, wenn die aktuelle Stunde 7, 8 oder 9 ist.

Das gleiche gilt für die anderen Mahlzeiten. Es ist ein Fehler in Ihrem Kommentar für das Mittagessen, die 122.880 dezimal sein sollte, nicht 122888.

Hier ist eine Tabelle

enter image description here

+0

Super erklärt !!. vielen Dank – PJUAREZG

1

Die And fungiert hier als bitwise and.
Ich denke, ein einfacheres Beispiel helfen könnten Sie es verstehen:

Enum bitwiseExample 
    Empty = 0  ' 0000 
    One = 1  ' 0001 
    Two = 2  ' 0010 
    Four = 4  ' 0100 
    Eight = 8  ' 1000 
EndEnum 

Dim x as integer = 6 ' 0110 

x and bitwiseExample.Empty = 0 ' since 0110 & 0000 = 0000 
x and bitwiseExample.One = 0 ' since 0110 & 0001 = 0000 
x and bitwiseExample.Two = 2 ' since 0110 & 0010 = 0010 
x and bitwiseExample.Four = 4 ' since 0110 & 0100 = 0100 
+0

Dank Sohar ist jetzt klar für mich wieder sehr thansk. – PJUAREZG