要查找输入的下一个奇数,请使用以下代码:
a=5.4; // Input
b=Math.ceil(a); // Required to turn input to whole number
b=b+(((b % 2)-1)*-1); // Gives 7
需要 ceil 舍入函数。
这是否安全,是否有更紧凑的方法来做到这一点?
编辑:当输入已经是奇数时,什么也不会发生。例如 5.0 将返回 5
要查找输入的下一个奇数,请使用以下代码:
a=5.4; // Input
b=Math.ceil(a); // Required to turn input to whole number
b=b+(((b % 2)-1)*-1); // Gives 7
需要 ceil 舍入函数。
这是否安全,是否有更紧凑的方法来做到这一点?
编辑:当输入已经是奇数时,什么也不会发生。例如 5.0 将返回 5
刚刚怎么样
b += b % 2 ^ 1;
除以 2 后的余数将始终为 0 或 1,因此^
运算符(异或)将其翻转为相反的。
(另外,(b & 1) ^ 1
也可以。哦,我想b = b ^ 1
它适用于正整数,但对于大整数会有问题。)
应问题作者的要求:
实现它的最紧凑的方法是
b = Math.ceil(a) | 1;
先用ceil()
求取不小于 的最小整数a
,再取不小于 的最小奇整数ceil(a)
,逐位或用 1 确保最后一位被设置,不做任何改变。
要获得严格大于 的最小奇整数a
,请使用
b = Math.floor(a+1) | 1;
位运算符在 Javascript 中对带符号的 32 位整数进行操作,因此 的值a
必须小于或等于2^31-1
, 和 。第二个严格更小。此外,a
必须大于-2^31-1
。
如果有符号整数的表示不是二进制补码,而是二进制补码或符号和大小(我不知道 Javascript 是否允许,Java 不允许,但它在 C 中是可能的),值a
必须是大于-1
- Math.ceil(a)
resp 的结果。Math.floor(a+1)
必须是非负的。
不是很短,但这更清晰:
a=5.4;
b=Math.ceil(a);
b = b % 2 ? b : b + 1;
试试这个:
a = 5.4
b = Math.ceil(a)
b = b%2 == 0 ? b+1 : b
y = Math.ceil((x - 1)/2)*2 + 1
在http://www.intmath.com/functions-and-graphs/graphs-using-jsxgraph.php上执行 fn
没有Math.ceil()
它可以这样做:
b = a + a % 2 | 0 + 1;
注意。我认为下一个奇数5.0
as 7
。