我正在审查我实习生的代码,我偶然发现了这样的事情:
//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... - 所以他
&的行为就像一个||。
我哪里错了??