我只是编写了一些条件变量,并认为将值设置为2个布尔值之间的相等结果会更容易。
处理方面哪些更快/更有效,显然这是微不足道的?
bool output = true&true;
或
bool output = true&&true;
我希望后者作为单一的等式检查,而不是计算整个字节
先前对模糊性表示感谢和道歉。从Robbas的回答中,如果代码类似于:
bool input1 = GenerateFirstValue();
bool input2 = GenerateSecondValue();
bool output = input1 && input2;
明显的改进是将前两行放入声明中意味着当值为false时,您将比按位检查或预设值更有效。特别是当逻辑有强化方法时。
bool output = GenerateFirstValue() && GenerateSecondValue();
即使这样做,也要先按要求最低的要求对支票进行排序。
答案 0 :(得分:1)
如果您有任何疑问,请对其进行分析。但在您的特定情况下,这些都是编译时可评估的常量表达式,编译器会将它们优化为相同的结果bool output = true;
一般来说,&
的两个参数都需要进行评估,而对于&&
,第二个参数仅在第一个参数为false
时进行评估。对于更复杂的表达式,差异可能很大。
您还应注意,即使a & b
和false
分别评估为a
,b
也可以<{1}} true
。以a = 0b01
和b = 0b10
为例。
答案 1 :(得分:1)
在您的假设示例中,我非常怀疑评估true
是否疯狂(如果没有完全编译),这很重要
但是举个例子:
bool output = veryLongFunction() & otherVeryLongFunction();
VS
bool output = veryLongFunction() && otherVeryLongFunction();
在这种情况下,双&amp;&amp;如果第一个计算结果为false,则表达式短路,因此比仅使用一个&amp;。
更快答案 2 :(得分:0)
取决于第二个参数。自console.log
构建
&&
将编译成(伪代码)
bool output = left && right;
如果 if (left != 0) // JZ or JNZ assembly instruction
output = right
else
output = 0;
为left
,false
根本不进行计算,right
是否耗时且right
为{{} 1}}经常足够left
是一个更有效的解决方案。
相反,当false
和&&
都只是left
值,而随机时,CPU分支预测符将被合并,条件
right
通常会预测错误,它会导致boolean
滴答惩罚。对于 if (left != 0)
,它将被编译为一个5-30
或left & right
汇编指令(AND
tick)。