在从另一个人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语句的结果。
我说的是,如果其中一个子表达式等于零则为假,否则为真?对不起,我对VB.net的速度不太高兴。
答案 0 :(得分:2)
lbytRelayStateMask和(2 ^ lintCounter)导致BIT编号lintCounter,它是打开或关闭的。有点是布尔值。 AND是一个位操作,而不是IF中的AND
作者也可能写过:
mblnRelayState(lintCounter)=(lbytRelayStateMask And(2 ^ lintCounter))
答案 1 :(得分:0)
是的,我相信你的分析是正确的。