2014-01-17 42 views
3
while(variable & 0x08) 

我發現這是在一個do while循環中,問題變量在技術上是16位int數組中的第四個索引。 while循環本身不會修改該數組。我發現一個奇怪的C + +語法

老實說,我不確定語法的作用。

+2

它運行,直到按位AND的結果爲零。 – OldProgrammer

+1

'variable'有什麼類型? – Shoe

+0

@Jefffrey一個整型,或者它不會編譯。 –

回答

7

這就是按位運算符和運算符。如果兩個操作數的相應位都置位,則結果的每一位都置1。所以這個循環在variable的第四位被設置。

這是假設variable是一個整數類型。如果它是一個類的類型,那麼運算符已經超載並且可以做任何事情。

+0

你確定嗎?如果不知道'變量'的類型和值是什麼,這個代碼的行爲如何? – Shoe

+0

@Jefffrey:的確,我假設一個整數類型。我已經說明了我的假設。 –

+0

所以一個&也是一個&也是一個&&? – Valarauca

5

這真的取決於variable的類型。發生這種情況是因爲operator&可能被重載。如果您聲明一個變量some variable;

class some {}; 

bool operator&(const some&, int) { 
    return true; 
} 

,並執行:例如考慮這個代碼

while(variable & 0x08) 

你會招致在一個無限循環。

如果variable是一個整數類型,循環將繼續執行其主體,直到variable的第四位未設置爲1。這是因爲0x08的位表示是:1000。因此,如果variable的第四位設置爲0bitwise AND將只能返回0的位表示。

2

這是無論是在整數類型,variable,在這種情況下,循環將執行,直到variable的第四位是0,或者它是一個已經過載operator&一個類型,在這種情況下,它將運行按位操作直到operator&(T&, int)(其中Tvariable的類型)的結果返回0(或者更確切地說,不等於非零條件)。