2017-08-08 11 views
-1

私はVBでこのロジックを理解していません。私は定数で一つの例を見てきました:これらのIf文の条件付きロジックの目的は何ですか?

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 

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

私の質問に、次の機能を使用する場合(AHORAそしてTurnos.DESAYUNOは))> 0 <である理由です?そして次の機能

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

私は論理がどちらであるか分かりません。誰か助けてくれますか?

+1

はありますか? – Ares

+0

あなたが理解していないコードについてのチュートリアルを要求するのではなく、何をしようとしているのかを説明してください。 – Plutonix

+0

あなたの構造体 '&H ...'は正しくありません:) – Codexer

答えて

1

あなたの定数の各列挙型には食べられるべきで食事に応じて、一日の特定の時間と重複するビットマスクです。

例えば、朝食は、380の10進値と896の10進値を持ち、(24ビット)000000000000001110000000の2進値を持ちます。最下位から数えてゼロから始まる、7,8,9ビット目高いです。もう1つの答えに記載されているように、ビット単位のとは、現在の時間をこの値でマスクするために使用されます。現在の時間が7,8,9に等しい場合のみ、結果は1になります。

他の食事にも同じことが適用されます。 122880小数でなければなりません昼食のためにあなたのコメントに誤り、ではない。ここ122888.

は、なぜあなたは `Math.Pow`を使用しているテーブル

enter image description here

+0

スーパー説明!!どうもありがとう – PJUAREZG

1

ここでAndbitwise andとして機能します。
私は単純な例では、あなたがそれを理解するのに役立つかもしれないと思う:

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

ありがとうございました。 – PJUAREZG

関連する問題