僅使用按位運算符(|, &, ~, ^, >>, <<)
,是否可以替換下面的!=
?用位運算符替換「!=」
// ...
if(a != b){
// Some code
}
/// ...
這主要是出於自身利益的,因爲我看到了如何與==
但不!=
做到這一點。
僅使用按位運算符(|, &, ~, ^, >>, <<)
,是否可以替換下面的!=
?用位運算符替換「!=」
// ...
if(a != b){
// Some code
}
/// ...
這主要是出於自身利益的,因爲我看到了如何與==
但不!=
做到這一點。
if(a^b) {
//some code
}
應該工作。
您也可以使用您的首選方法==
並在其後面添加^ 0xFFFFFFFF
(使用適當數量的F來匹配數據類型的長度)。這會抵消該值(與前面的!
相同)。
或者,如果XOR不可用,則可以將'(a XOR b)'表示爲'(((NOT a)AND b)OR(a AND NOT(b)))'。 –
這讓人感覺像家庭作業一樣可怕,所以我只會帶領你大部分途徑:「這兩個整數是否相等」也可以表述爲「這兩個整數中的任何位不等於」。你會如何測試?
這不是家庭作業,我之前回答了一個問題,並且看到了這個:http:// stackoverflow.com/questions/4161656/replacing-with-bitwise-operators,那是當我想知道如何做。 – Annabelle
if (a^b) { }
身體必須至少30個字符;您輸入了27
a != b
意味着a
和b
的位表示中至少有一個不同的位。如果兩個輸入位操作數不同,則異或位運算符返回1,否則返回0。
因此,您可以將異或運算應用於a
和b
並檢查結果是否不等於零。
測試的按位版本可能類似於:
if((a - b) | (b - a)) {
/* code... */
}
描述ORS兩個減法。如果兩個數字相同,結果將爲0.但是,如果它們不同(即'!='運算符),那麼結果將爲1.
注意:上面的代碼段只能工作與整數(和那些整數應該可能是無符號的)。
如果你要模擬的「==」操作,然而,在Replacing "==" with bitwise operators
x^y
檢查費邊吉森的答案並不總是足夠的。使用!!(x^y)
。期望一位返回值的值將不會與x^y
一起使用,因爲它留下的餘數可能會大於1.
a和b是否都是?或字符串? – duedl0r
按位操作對字符串有意義嗎? – nothrow
不是按位,但仍值得一提? 'if(a b)' – ajax333221