我有两个变量M
& N
并且在我的循环中有一定条件我希望在N
和M
之间切换MxN = M * N;
N = MxN/N;
的值。所以我想到了以下代码
M
但N
和counter = 2;
N = counter % 2 == 0 ? M : N;
counter++;
的值可能是2 000 000 000.因此我有疑问。这是一个很好的变体,可以在如此巨大的价值之间切换,也可能更好(更快)到
{{1}}
修改
对不起,我没有提到我不想影响M
的价值
谢谢大家)
答案 0 :(得分:2)
有很多方法。
m -= n
n += m
m = n - m
2 http://jsfiddle.net/eQGwL/(仅适用于FireFox和Rhino)
[n, m] = [m, n]
m = (n += m -= n) - m
如果您不想更改m
的值,则需要一个临时值。
var n = 5
var m = 8
var t = n
for (var i = 0; i < 10; ++i) {
if(n != m) n = m
else n = t
console.log(n + ' ' + m)
}
答案 1 :(得分:1)
两种方法都怀疑是整数溢出(前者也是精确错误)。为什么不限制计数器的范围并采用第二种方法?
state = 0;
switch (state) {
case 0:
// ...
break;
case 1:
// ...
break;
// ...
}
state = state < maxState ? state + 1 : 0;
由您来优化此功能,但请记住可读性和可维护性。此switch
的替代方法是使用数组。
对于两个变量,请不要在尝试交换变量时弄乱xor
黑客,只需写下您想要的内容:
var temp = N;
N = M;
M = N;
答案 2 :(得分:0)
交换两个值的经典技巧是使用XOR:
x = x xor y
y = x xor y
x = x xor y