0

我有两个变量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的价值
谢谢大家)

4

3 回答 3

2

有很多方法。

1 http://jsfiddle.net/8NvVf/

m -= n
n += m
m = n - m

2 http://jsfiddle.net/eQGwL/(仅适用于 FireFox 和 Rhino)

[n, m] = [m, n]

3 http://jsfiddle.net/4MQXe/

m = (n += m -= n) - m

编辑

如果您不想更改值,则m需要一个临时值。

http://jsfiddle.net/Yjkn3/

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)
}
于 2013-03-08T15:16:00.767 回答
1

这两种方法都存在整数溢出问题(前一种方法也存在精度错误)。为什么不限制计数器的范围并采用第二种方法?

state = 0;
switch (state) {
case 0:
    // ...
    break;
case 1:
    // ...
    break;
// ...
}

state = state < maxState ? state + 1 : 0;

由您来优化它,但请牢记可读性和可维护性。另一种方法switch是使用数组。

对于两个变量,在尝试交换变量时请不要乱用xorhack,只要写你想要的:

var temp = N;
N = M;
M = N;
于 2013-03-08T15:06:10.400 回答
0

交换两个值的经典技巧是使用 XOR:

x = x xor y
y = x xor y
x = x xor y
于 2013-03-08T15:06:14.947 回答