int dividend; /* 被除数 */
int divisor; /* 除数 ※2以上の正の数 */
if (dividend < 0) {
dividend = -(dividend + 1);
dividend %= divisor;
dividend = divisor - 1 - dividend;
} else {
dividend %= divisor;
}
自分は固定小数点数三角関数ライブラリで角度を丸めるのにも使ってます。
divisorが2の累乗の定数のときは最適化が期待できるのでC/C++ではインライン展開されるように実装すると良いと思います。
タイルマップ座標のオフセットを求める(ISLeのビデオゲーム工房)