关于C中除法向上取整的证明

时间:2021-03-19 01:45:25

        在C语言中整数除法取的既不是Floor也不是Ceiling,当操作数为正的时候相当于Floor,当操作数为负的时候相当于Ceiling。

        如何实现正整数的向上取整

  假设变量x和n是两个正整数,我们知道x/n这个表达式的结果要取Floor,例如x是17,n是4,则结果是4。如果希望结果取Ceiling应该怎么写表达式呢?例如x是17,n是4,则结果是5;x是16,n是4,则结果是4。

        网上搜索到结果为如下:(x+n-1)/n;


证明:

      设x=kn,k为整数,即x为n的整数倍。则(x+n-1)/n=(kn+n-1)/n=((k+1)n-1)/n,此时分子没有达到n的k+1倍,但大于等于n的k倍, 默认计算取下整则为k。符合要求。
      设x=kn+m,k为整数,m为整数且0<m<n。则(x+n-1)/n=(kn+m+n-1)/n=((k+1)n+m-1)/n。此时分子的大于等于(k+1)n,小于(k+2)n, 按照默认计算应该为k+1。符合要求。

      综上,两个正整数x/n这个表达式的结果要取Ceiling,表达式为:(x+n-1)/n