2011-03-30 79 views
3

下面的C++代碼是做什麼的?更具體地說,什麼是運營商|=運算符`| =`是什麼?我如何在C#中實現這一點?

long liFaultFlags = 0; 

for (int i = 0; i < FAULTCOUNT; i++) 
{ 
    if (faults[i] == true) 
    { 
     liFaultFlags |= (1 << i); 
    } 
} 

return liFaultFlags; 

這將如何在C#中實現?

+3

下面的答案是明顯的遺漏,需要注意的是,在C++中,操作符可以被重載以表示不同的東西,儘管在你的情況下它看起來好像你正在與兩個基本的數字類型進行交互,這意味着行爲應該如預期。 – zzzzBov 2011-03-30 21:40:50

回答

14

這是bitwise OR operator,相當於

liFaultFlags = liFaultFlags | (1<<i); 

你會寫這行恰好在C#中以同樣的方式。

+5

對於出於禮貌的緣故,我將其稱爲'按位或'而不是'二進制或'。 – ildjarn 2011-03-30 21:40:03

+0

它不是「二進制按位OR」,其中二進制是指操作符的類型而不是它處理的數據? – spender 2011-03-30 21:44:47

+1

「二元」在技術上是錯誤的。不能有*一元* OR(按位或其他)。 Pedantic,就像ildjarn說的:) – Jon 2011-03-30 21:45:58

8

operator |=做按位或分配滾動到一個(很像+ =做整數加法和一起分配)。

它在C#中完全一樣。