VB.Net Anding байт и двойной

во время некоторого преобразования кода из проекта VB.net другого человека в C# я столкнулся со следующим кодом:

Public Sub New(ByVal lbytModuleAddress As Byte, ByVal lbytRelayStateMask As Byte)
    Dim lintCounter As Integer

    mbytModuleAddress = lbytModuleAddress
    For lintCounter = 0 To 7
        If lbytRelayStateMask And (2 ^ lintCounter) Then
            mblnRelayState(lintCounter) = True
        Else
            mblnRelayState(lintCounter) = False
        End If
    Next
End Sub

Теперь я пытаюсь преобразовать это в С#, но я немного запутался в точном значении этой строки:

If lbytRelayStateMask And (2 ^ lintCounter) Then

Может кто-нибудь просветить меня? Похоже, что-то происходит за кулисами (что мне нужно будет изучить дальше), однако, прежде чем я это сделаю, я просто хотел бы уточнить результат этого оператора if.

Правильно ли я говорю, что если одно из подвыражений равно нулю, то оно ложно, иначе истинно? Извините, я не слишком разбираюсь в VB.net.


person Simon    schedule 01.08.2011    source источник


Ответы (2)


lbytRelayStateMask И (2 ^ lintCounter) приводит к BIT номеру lintCounter, который включен или выключен. бит - логическое значение. И - это битовая операция, а не И в ЕСЛИ

автор тоже мог бы написать:

mblnRelayState(lintCounter) = (lbytRelayStateMask And (2 ^ lintCounter))

person Martin    schedule 01.08.2011
comment
Спасибо, Мартин. Любые предложения, как это можно было бы переписать на С#? - person Simon; 02.08.2011
comment
используйте & (одиночный!), где основное использование AND. ^ будет Math.Pow(2,lintCounter). см. msdn.microsoft.com/en-us/ library/sbf85k1c(v=vs.71).aspx и msdn.microsoft.com/en-us/library/system.math.pow.aspx - person Martin; 02.08.2011

Да, я считаю, что вы правы в своем анализе.

person Tom    schedule 01.08.2011