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