我有两个变量M
&N
并且在我的循环中有特定条件我想N
在自身和M
. 于是我想到了下面的代码
MxN = M * N;
N = MxN/N;
但是M
和的值N
可能是 2 000 000 000。因此我对此表示怀疑。是在如此巨大的值之间切换的好变体还是可能更好(更快)
counter = 2;
N = counter % 2 == 0 ? M : N;
counter++;
编辑
对不起我没有提到我不想影响M的价值
谢谢大家)
我有两个变量M
&N
并且在我的循环中有特定条件我想N
在自身和M
. 于是我想到了下面的代码
MxN = M * N;
N = MxN/N;
但是M
和的值N
可能是 2 000 000 000。因此我对此表示怀疑。是在如此巨大的值之间切换的好变体还是可能更好(更快)
counter = 2;
N = counter % 2 == 0 ? M : N;
counter++;
编辑
对不起我没有提到我不想影响M的价值
谢谢大家)
有很多方法。
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)
}
这两种方法都存在整数溢出问题(前一种方法也存在精度错误)。为什么不限制计数器的范围并采用第二种方法?
state = 0;
switch (state) {
case 0:
// ...
break;
case 1:
// ...
break;
// ...
}
state = state < maxState ? state + 1 : 0;
由您来优化它,但请牢记可读性和可维护性。另一种方法switch
是使用数组。
对于两个变量,在尝试交换变量时请不要乱用xor
hack,只要写你想要的:
var temp = N;
N = M;
M = N;
交换两个值的经典技巧是使用 XOR:
x = x xor y
y = x xor y
x = x xor y