class="php" name="code">$a = $b = $c = 0; $a & $b = 1; $b | $c = 1
?问a,b,c最终为多少?
?
当看到这题时,我犯了一个低级错误,误 以为位运算符会改变变量的值。所以得出结果是1?1 0
但是位运算符是不会改变变量的值的,例如:
$a=1;$b=2; $a&$b;
?这样a,b的值不会有任何改变
?
再看到上面那题,先弄清一下运算符的优先级
运算符优先级 结合方向 运算符 附加信息 非结合 clone new clone 和 new 左 [ function">array() 非结合 ++ -- 递增/递减运算符 非结合 ~ - (int) (float) (string) (array) (object) (bool) @ 类型 非结合 instanceof 类型 右结合 ! 逻辑caozuofu.html" target="_blank">操作符 左 * / % 算术运算符 左 + - . 算术运算符和字符串运算符 左 << >> 位运算符 非结合 < <= > >= <> 比较运算符 非结合 == != === !== 比较运算符 左 & 位运算符和引用 左 ^ 位运算符 左 | 位运算符 左 && 逻辑运算符 左 || 逻辑运算符 左 ? : 三元运算符 右 = += -= *= /= .= %= &= |= ^= <<= >>= 赋值运算符 左 and 逻辑运算符 左 xor 逻辑运算符 左 or 逻辑运算符 左 , 多处用到?由此得知位运算符的优先级是大于赋值运算符的
由此上面的代码亦可以写为
$a = $b = $c = 0; $a&$b; $b = 1; $b | $c; $c = 1;
?结果很明显a为0,b为1,c为1
位运算符 例子 名称 结果 $a & $b And(按位与) 将把 $a 和 $b 中都为 1 的位设为 1。 $a | $b Or(按位或) 将把 $a 或者 $b 中为 1 的位设为 1。 $a ^ $b Xor(按位异或) 将把 $a 和 $b 中不同的位设为 1。 ~ $a Not(按位非) 将 $a 中为 0 的位设为 1,反之亦然。 $a << $b Shift left(左移) 将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。 $a >> $b Shift right(右移) 将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。