Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的下一个奇数_Javascript_Algorithm_Math - Fatal编程技术网

javascript中的下一个奇数

javascript中的下一个奇数,javascript,algorithm,math,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 需要ceil舍入功能 这样做安全吗?有没有更紧凑的方法 编辑:当输入已经是奇数整数时,则不会发生任何事情。例如,5.0将返回5 b += b % 2 ^ 1; 除以2后的余数总是0或1,因此^运算符(异或)将其翻转到相反的位置 (还有,(

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

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
对正整数也可以,但对大整数会有问题。)

试试这个:

a = 5.4
b = Math.ceil(a)
b = b%2 == 0 ? b+1 : b

不是很短,但更清晰:

a=5.4;
b=Math.ceil(a);
b = b % 2 ? b : b + 1;
在不使用
Math.ceil()
的情况下在上执行fn,可以这样做:

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

>Nb.<强>下一个奇数的<代码> 5 < /代码>为<代码> 7

< P>在提问作者的请求:

实现这一目标的最简洁的方法是

b = Math.ceil(a) | 1;
首先使用
ceil()
获取不小于
a
的最小整数,然后通过按位或与1进行运算来获取不小于
ceil(a)
的最小奇数整数,以确保在不更改任何其他内容的情况下设置最后一位

要获得严格大于
a
的最小奇数整数,请使用

b = Math.floor(a+1) | 1;
注意事项: 位运算符在Javascript中对有符号32位整数进行操作,因此
a
的值必须小于或等于
2^31-1
,分别为。严格地说,第二个更小。另外,
a
必须大于
-2^31-1


如果有符号整数的表示不是2的补码,而是1的补码或符号和大小(我不知道Javascript是否允许,Java不允许,但在C中是可能的),那么
a
的值必须大于
-1
——这是
Math.ceil(a)
resp的结果<代码>数学地板(a+1)必须是非负的。

嗯@如果
b
为零,则下一个奇数为1。它不应该一直寻找后续的奇数,或者至少我在OP中没有看到任何迹象。lol dunno为什么,但我认为它应该通过运行它来继续获得下一个奇数:Db=b^1将正常工作。与最大整数值相比,输入值很小。@很抱歉接受另一个答案,但希望您理解。你值得投票。那
5.0
怎么样?你认为下一个奇数是什么?@VisioN是同一个数字。5.0->5(更新问题)谢谢将是最简洁的,我想。”丹尼尔菲舍,这就是我真正想要的答案。它包括Math.ceil调用!如果你提交你的评论作为答案,我将切换接受的答案。谢谢。对不起,我应该从一开始就添加角盒。更新问题。保留这个答案。。。除非你被否决;)
b = Math.floor(a+1) | 1;