如何获得C中数字的上限?
如果我将3除以2,我希望答案为2(即1.5舍入为2)。
答案 0 :(得分:13)
如果你只想要除以2,那么只需取(n + 1)/ 2就可以将它保持在整数数学中。例如(3 + 1)/ 2给出2.对于更大的数字x,使用x - 1.例如,(3 + 7)/ 8 = 1,3除以8。
对于一般情况,您正在寻找天花板功能 - ceil。快速Google搜索“math ceil C”会将此页面放在搜索结果的顶部:http://www.elook.org/programming/c/ceil.html
答案 1 :(得分:4)
答案 2 :(得分:3)
#include <math.h>
ceil(3.0/2); //2.0
请注意,一个操作数应该是double(或float),因为3/2给你1
答案 3 :(得分:2)
int x= ceil((float)3/2);
答案 4 :(得分:1)
要在不使用函数的情况下进行舍入,只需在除法之前加上一半除数。 如果除数是常量,编译器可以很好地优化代码。
int number = 3;
int divisor = 2;
int result = (number + (divisor+1)/2) / divisor;
答案 5 :(得分:1)
int i = 3;
int j = 2;
int k = (i + j - 1) / j;
答案 6 :(得分:1)
(如果这有资格作为线程的死灵法术,请通知我,我会删除它)
返回向上舍入商的快速方法是将除数(减1)加到被除数中,并除以。
int ceil_div(int dividend, int divisor) {
return (dividend + divisor - 1) / divisor;
}
或者,
int ceil_div(int dividend, int divisor) {
return (dividend - 1) / divisor + 1;
}
相反,你将通过从3减去1,除以2,然后加1来工作。
我会试着解释为什么会这样。如果被除数和除数都是浮点数,则截断的整数等价于(被除数 / 除数)将是相等的如果除数完全除以股息,则为商数的上限;如果不能完全划分股息,则为少于商数的上限。通过减去1,我们保证新除数被除数 - 1 ,除以除数时,将始终返回一个小于浮点商的上限的值。 / p>
现在剩下的就是给这个商添加1,顺便说一下,这是一个((浮动)红利/(浮动)除数)。
答案 7 :(得分:0)
int x = 3.0/2 + 0.5;