2012-09-21 277 views
0

僅使用按位運算符(|, &, ~, ^, >>, <<),是否可以替換下面的!=用位運算符替換「!=」

// ... 
if(a != b){ 
    // Some code 
} 
/// ... 

這主要是出於自身利益的,因爲我看到了如何與==但不!=做到這一點。

+0

a和b是否都是?或字符串? – duedl0r

+0

按位操作對字符串有意義嗎? – nothrow

+0

不是按位,但仍值得一提? 'if(a b)' – ajax333221

回答

7
if(a^b) { 
    //some code 
} 

應該工作。

您也可以使用您的首選方法==並在其後面添加^ 0xFFFFFFFF(使用適當數量的F來匹配數據類型的長度)。這會抵消該值(與前面的!相同)。

+1

或者,如果XOR不可用,則可以將'(a XOR b)'表示爲'(((NOT a)AND b)OR(a AND NOT(b)))'。 –

1

這讓人感覺像家庭作業一樣可怕,所以我只會帶領你大部分途徑:「這兩個整數是否相等」也可以表述爲「這兩個整數中的任何位不等於」。你會如何測試?

+0

這不是家庭作業,我之前回答了一個問題,並且看到了這個:http:// stackoverflow.com/questions/4161656/replacing-with-bitwise-operators,那是當我想知道如何做。 – Annabelle

1
if (a^b) { } 

身體必須至少30個字符;您輸入了27

3

a != b意味着ab的位表示中至少有一個不同的位。如果兩個輸入位操作數不同,則異或位運算符返回1,否則返回0。

因此,您可以將異或運算應用於ab並檢查結果是否不等於零。

-2

「〜」等於不應該工作。示例將是「一個&_b」。 '!='

+0

這是完美的,簡單的優雅,和作品。做得好。 – Annabelle

+2

當你通過零時也是錯誤的。 – willglynn

+0

當我這樣做的時候它有效嗎? – Annabelle

0

測試的按位版本可能類似於:

if((a - b) | (b - a)) { 
    /* code... */ 
} 

描述ORS兩個減法。如果兩個數字相同,結果將爲0.但是,如果它們不同(即'!='運算符),那麼結果將爲1.

注意:上面的代碼段只能工作與整數(和那些整數應該可能是無符號的)。

如果你要模擬的「==」操作,然而,在Replacing "==" with bitwise operators

0

x^y檢查費邊吉森的答案並不總是足夠的。使用!!(x^y)。期望一位返回值的值將不會與x^y一起使用,因爲它留下的餘數可能會大於1.