0

変数 a と b が 32 ビット整数であると仮定すると、3 項演算子も比較演算子も使用せずに、a < b の場合は 0 を返し、a >= b の場合は 1 を返す方法はありますか?

4

2 に答える 2

2

これはできますが、きれいではありません。

問題は、前述のとおり、オーバーフローです。ただし、次のように回避できます。

return ((x - y) ^ ((x ^ y) & ((x - y) ^ x))) >>> 31;

署名済みバージョンの場合、または

return ((~x & y) | ((~x | y) & (x - y))) >>> 31;

無印版用。

Javaの>>>ように、符号なし右シフトがあります。

それらを使用してx = b, y = a、機能に一致させます。

これら (およびその他) は、Hacker's Delight の「比較述語」という名前で見つけることができます。

于 2014-02-15T19:50:54.010 に答える