我正在审查我实习生的代码,我偶然发现了这样的事情:
//k* are defined constants
if ($a == 0 & $b >= k0) $a = 1;
if ($a == 1 & $b >= k1) $a = 2;
if ($a == 2 & $b >= k2) $a = 3;
我认为他犯了一个错误,令人困惑&
并且&&
(我排除了一个逻辑与)
但是,事实上,他的代码按预期工作,我不明白为什么。在我看来,>=
优先于==
,也优先于&
(参考)。
所以,我测试(1 == 0 & 1 >= 0)
并输出0
。我期待1
,因为在我看来,就像:
1 >= 0
返回true
,- 然后
1 == 0
给出false
, - 所以现在的表达式是
(false & true)
,我认为等于(0 & 1)
- 这等于
1
... - 所以他
&
的行为就像一个||
。
我哪里错了??