2011-08-01 25 views
0

期間從另一個人VB.net項目C#的一些代碼轉換,我曾經碰到過下面的代碼:VB.Net安定字節和雙

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上加快速度。

回答

2

lbytRelayStateMask和(2^lintCounter)結果爲BIT號lintCounter,它是打開或關閉的。一點是一個布爾值。並且是位運算,而不是和在IF

個作家可能寫得太:

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

+0

感謝馬丁。任何建議如何可以用C#重寫? – Simon

+0

使用&(單!)基本用途AND。 ^將是Math.Pow(2,lintCounter)。請參閱http://msdn.microsoft.com/en-us/library/sbf85k1c(v=vs.71).aspx和http://msdn.microsoft.com/en-us/library/system.math.pow。 ASPX – Martin

0

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