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;