質問: 4の環境が前提だと思うので、diffは常に31ビット右シフトすることになります。それを反転して&。何が何やら・・・。
回答: 負の数を右シフトしたときの動作は未規定で、コンパイラによって違っていても構わないのですが、算術右シフトにしている処理系が多いようなので、ここでもそうだと仮定します。 結論からいうと、`diff` が正または 0 なら、そのまま返し、負だったら 0 を返す、というのが意図だと思います。 算術右シフトは一番左の符号ビットを残したままシフトしていきます。`8*sizeof(int)-1` は、int のビット数 - 1 なので、その分、右にシフトすると、全てのビットが符号ビットと同じになります。つまり正の数なら 0、負の数なら全てのビットが 1 (0xFFFFFFFF) になります。これを反転して & すれば、結論のようになります。