C の int 除算は常にゼロに向かって丸められるため、均等に丸めるために使用できる簡単な方法は、丸めが行われる前に数値に「0.5」を追加することです。たとえば、32 で割りたい場合は、
x = (a+16)/32;
またはより一般的には、a/b の場合、a と b は両方とも正です。
x = (a+b/2)/b;
残念ながら、結果が負の場合、0.5 を加算するのではなく減算する必要があるため、負の数は少し複雑になります。コードを書いているときに、それが肯定的か否定的かがわかっている場合は問題ありませんが、肯定的答えと否定的答えの両方を扱うと厄介になります。あなたはこのようにすることができます...
x = (a+((a/b>0)?1:-1)*(b/2)) / b;
しかし、その段階までにはかなり複雑になり始めています - float にキャストしてround
関数を使用する方がおそらく良いでしょう。
--
[編集] zakinster が指摘したように、質問では「ラウンド」値が求められましたが、与えられた例では実際には が必要ですceil
。int でそれを行う方法は次のようになります。
x = (a+b-1)/b;
繰り返しますが、答えが負になる可能性がある場合、これは複雑になります。
x = (a+((a/b>0)?1:-1)*(b-1)) / b;
誰かが興味を持っている場合に備えて、丸めの元の応答を残します。