javascript中的下一个奇数

时间:2012-06-25 17:17:51

标签: javascript algorithm math

要查找输入的下一个奇数,请使用以下代码:

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

6 个答案:

答案 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)

答案 5 :(得分:1)

如果没有Math.ceil(),可以这样做:

b = a + a % 2 | 0 + 1;

NB。我认为5.0的下一个奇数为7