Arrays 计算或条件检查是否产生更好的性能

Arrays 计算或条件检查是否产生更好的性能,arrays,performance,Arrays,Performance,这个问题包含一个JavaScript示例,但它也可能与其他语言相关 我得到了一个2d二进制数组(值仅设置为1和0)。我想做一个动作来切换所有的值,这意味着把所有的0都变成1,把所有的1变成0 以下哪种方法更好: (一) for(变量i=0;i

这个问题包含一个JavaScript示例,但它也可能与其他语言相关

我得到了一个2d二进制数组(值仅设置为1和0)。我想做一个动作来切换所有的值,这意味着把所有的0都变成1,把所有的1变成0

以下哪种方法更好:

(一)

for(变量i=0;i

(二)

for(变量i=0;i

我想知道是否有一种最适合大多数情况的通用方法。另外,特别是关于JS,有没有比这两种方法更好的方法呢?

我会选择第二种方法,或者使用xor操作,如下所示:

for (var i = 0; i < rows; i++) {
    for (var j = 0; j < cols; j++) {
        arr[i][j] ^= 1;
    }
}
for(变量i=0;i

问题是,如果语句转换成分支指令,由于分支预测失误,分支指令的速度可能会很慢。然而,在这样一个例子中,性能的提高几乎不会显示出来,如果这会降低代码的可读性,那么就不值得了。始终优化最后一个,如果绝对必要。

测量它。。。。。但一般来说,如果你能摆脱一个分支(条件),就去做吧!使用按位NOT运算符代替减法,以避免2的进位问题;s-补码算法:一般来说,由于现代处理器中的流水线操作,避免代码中的条件分支将导致更好的性能。@PieterGeerkens:他想要0和1,这显然行不通。@KarolyHorvath:可能;但OP知道他想要什么,这对我来说并不是先验的明显。@usr xor只是常规的旧逻辑,没有理由不理解it@usr看起来你称之为“更模糊”,是基于原作是“模糊化”的前提,我真的不这么认为。XOR似乎很有趣。我想这取决于体系结构和编译器/解释器。@Thomas这是关于异或交换与常规交换的比较,结果并不令人惊讶。但这里我们没有,这是“带常数的异或”vs“比较和分支”
for(var i = 0; i < rowsNum; i++)
    {
        for(var j = 0; j < colNum; j++)
        {
           arr[i][j] = 1 - arr[i][j];
        }
    }
for (var i = 0; i < rows; i++) {
    for (var j = 0; j < cols; j++) {
        arr[i][j] ^= 1;
    }
}