#include <stdio.h>
int foo(int a, int b)
{
return ((a>>= b<<= a) ? 1 : 0);
}
void bar(int x, int y)
{
printf("%d,%d: %s\n",x, y, (foo(x,y) ? "Equal" : "Not Equal"));
}
int main()
{
bar(0,1);
bar(4,4);
bar(3,2);
bar(9,9);
bar(-2,-2);
bar(-8,8);
return 0;
}
上述程序的輸出是奇怪的平等檢查使用逐移位運算
0,1: Not Equal
4,4: Equal
3,2: Not Equal
9,9: Equal
-2,-2: Equal
-8,8: Equal
你能幫助我理解平等檢查在功能foo
()是如何工作的?如果一個論點是積極的而另一個是否定的,爲什麼它失敗函數foo
()中的解決方法是什麼,以正確顯示所有情況下的結果,即所有負面和正面參數的解決方法?
編輯:從下面的答案,對於其他值的結果是:
70,72: Equal
-2,-2: Equal
64,64: Equal
128,32: Equal
256,250: Not Equal
250,256: Equal
-250,-256: Equal
請解釋一下,爲什麼這種平等檢查適用於某些值集,而不是爲別人。裏面發生了什麼?
但是,如果它是明確的賦值,那麼'foo()'能夠正確輸出所有正輸入嗎? (上面問題的輸出示例) –
@Manav巧合?無論如何,你爲什麼要這樣做?普通的老式'=='有什麼問題? –
'foo()'似乎可以很好地處理單個數字的數字:) –