【发布时间】:2012-03-13 16:46:04
【问题描述】:
我们都知道,如果左操作数是false,逻辑运算符&&会短路,因为我们知道如果一个操作数是false,那么结果也是false。
为什么按位& 运算符也不会短路?如果左操作数是0,那么我们知道结果也是0。我在(C、Javascript、C#)中测试过的每种语言都会评估两个操作数,而不是在第一个操作数之后停止。
有什么理由让& 运算符短路是个坏主意吗?如果不是,为什么大多数语言不把它变成short-cicuit?这似乎是一个明显的优化。
【问题讨论】:
-
一个原因是考虑到函数调用的副作用。
-
由于位运算符通常用于整数操作数的按位运算(并且通常对应于单个机器指令),因此除了引入一个额外的条件来检查罕见0例。为什么乘法不会在0上短路?好吧,因为它是对应于单个机器指令的简单算术运算,并且检查没有人会检查每个乘法运算是否为 0。
-
如果左操作数是
0xFFFFFFFF,则按位|运算符可能会短路。
标签: language-agnostic bit-manipulation