固定少数点で負数の時だけ処理するのを条件判断を使わずにやりたいなら、
ret = (2 * a + b*sgn) / (2 * b);
として sgn を 1か-1にすればいい
あるいは
ret = (2 * a + b*(sgn+1)-b) / (2 * b);

とすれば sgn+1 は 0か2なので 0か-1の変数fを使い
ret = (2 * a-b + 2*b&f) / (2 * b);

xor結果の最上位で fを-1か0にすればいい

 ・右へのビット幅だけシフト
 ・インラインアセンブラを使って符号拡張命令

 して、符号ビットを埋めて ゴチャゴチャやる方法があるけど、そんなの使いたい?