Pet*_*son 6 language-agnostic bit-manipulation
我们都知道&&如果左操作数是逻辑运算符短路false,因为我们知道如果一个操作数是false,那么结果也是false.
为什么按位运算&符也不会短路?如果左操作数是0,那么我们知道结果也是0.我在(C,Javascript,C#)中测试过的每种语言都会评估两个操作数而不是在第一个之后停止.
是否有任何理由让&操作员短路是个坏主意?如果没有,为什么大多数语言都没有让它成为短暂的?这似乎是一个明显的优化.
我猜这是因为and源语言中的按位通常会直接转换and为由处理器执行的按位指令.反过来,它被实现为and硬件中适当数量的门的一组.
在大多数情况下,我不认为这是优化任何东西.评估第二个操作数通常比测试成本低于是否应该评估它.
短路不是优化设备.它是一种控制流设备.如果你没有短路p != NULL && *p != 0,你将不会得到一个稍微慢一点的程序,你将得到一个崩溃的程序.
这种短路几乎从不对按位运算符有意义,并且比普通的非短路运算符更昂贵.