我有一段像
这样的代码if (A[i][j] === 1)
A[i][j] = 0;
else
A[i][j] = 1;
我想知道如何优化它
var elem = A[i][j]; // obviously A[i][j] is an R-value ... I want an L-value
if (elem === 1)
elem = 0;
else
elem = 1;
此外,我想知道是否有一个操作可以执行相当于在0
和1
之间切换的操作,相当于
if (elem === 1)
elem = 0;
else
elem = 1;
是否有一些花哨的按位操作可以做到这一点?
答案 0 :(得分:1)
@Andreas的评论是一个很好的优化。变成后人的答案:
A[i][j] ^= 1;
它只检索一次值并应用结果。您仍然无法获取内存地址(JS仅供参考),但它限制了您访问它的次数。
当应用1个掩码时,Bitwise XOR具有转动0 -> 1
和1 -> 0
的良好效果。通过在一个操作中完成所有工作,您可以获得尽可能少的访问。
编辑:根据讨论,当数组填充0/1值时,此解决方案仅 。