0

在从另一个人的 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

现在我试图将其转换为 C#,但我对这一行的确切含义有点困惑:

If lbytRelayStateMask And (2 ^ lintCounter) Then

有人可以启发我吗?似乎在幕后发生了一些事情(我必须进一步检查)但是在我这样做之前,我只想澄清这个 if 语句的结果。

我是否正确地说如果任何一个子表达式等于 0 则为假,否则为真?抱歉,我在 VB.net 上的速度不太快。

4

2 回答 2

2

lbytRelayStateMask 与 (2 ^ lintCounter) 得到 BIT 号 lintCounter,即开启或关闭。位是一个布尔值。AND 是位运算,而不是 IF 中的 AND

作者可能也写过:

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

于 2011-08-01T11:56:28.493 回答
0

是的,我相信你的分析是正确的。

于 2011-08-01T09:11:01.400 回答