#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
この同等性チェックが一部の値セットで機能し、他の値セットでは機能しない理由を説明してください。内部で何が起こっているのですか?