比較演算子を使用せず、if、else などを使用せずに、2 つの整数の最大値をプログラムで返すにはどうすればよいですか?

max:// MAX(a,b) を a に入れます

a -= b;
a &= (~a) >> 31;
a += b;

そして:

int a、b;

min:// MIN(a,b) を a に入れます

a -= b;
a &= a >> 31;
a += b;

ここから。


http://www.graphics.stanford.edu/~seander/bithacks.html#IntegerMinOrMax

r = x - ((x - y) & -(x < y)); // max(x, y)

算術シフト (x - y) を楽しむことができます 符号ビットを飽和させますが、通常はこれで十分です。または、ハイビットをテストすることもできます。常に楽しいです。


数学の世界:

max(a+b) = ( (a+b) + |(a-b)| ) / 2
min(a-b) = ( (a+b) - |(a-b)| ) / 2

数学的に正しいことは別として、シフト操作で必要なビット サイズに関する仮定を行っていません。

|x| x の絶対値を表します。

コメント:

そうです、絶対値を忘れていました。これは、すべての a、b 正または負に有効である必要があります