在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+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