我在代码库的实用程序头中找到了以下宏:
#define CEILING(x,y) (((x) + (y) - 1) / (y))
Run Code Online (Sandbox Code Playgroud)
哪个(在这个答案的帮助下)我解析为:
// Return the smallest multiple N of y such that:
// x <= y * N
Run Code Online (Sandbox Code Playgroud)
但是,无论我多么盯着我们的代码库中如何使用这个宏,我都无法理解这种操作的价值.没有任何用法被评论,这似乎表明它是显而易见的.
任何人都可以为这个宏提供用例的英文解释吗?它可能很明显,我只是看不到它......
当您在C中使用整数除法时
y = a / b
Run Code Online (Sandbox Code Playgroud)
你师四舍五入的结果趋向于零,即5 / 2 == 2,-5 / 2 == -2.有时候需要以另一种方式对它进行舍入5 / 2 == 3,例如,如果你想采用最小整数数组大小来保存n字节,你可能需要n / sizeof(int)向上舍入,因为你需要空间来保存那些额外的字节.
所以这个宏确实如此:CEILING(5,2) == 3但请注意它只适用于正面y,所以要小心.