算数运算符
+ 加
- 减
* 乘
/ 除
% 取余
- 取反
. 并置,连接符
递增/递减运算符
++x 预递增
x++ 后递增
--x 预递减
x-- 后递减
注:不管运算符是前置还是后置,对x的结果都是递增或递减的,前置后置影响的是运算符处理后的结果
比较运算符
== 等于
=== 绝对等于,类型也要一致
!=或者<> 不等于
!=== 不等于或者类型不同
> 大于
< 小于
>= 大于等于
<= 小于等于
逻辑运算符
and或者&& 并且
or或者|| 或者,至少一个为真
xor 异或,有且仅有一个为真
! 非
三元运算符
语法格式如下,相当于if...else...
(expr1) ? (expr2) : (expr3)
注:在 PHP7+ 版本多了一个 NULL 合并运算符 ??, 相当于js中 ||
<?php
// 如果 $_GET['user']存在则返回本身,不存在返回 'nobody'
$username = $_GET['user'] ?? 'nobody';
// 类似的三元运算符
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
组合比较符(PHP7+)
<?php
// 整型
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// 浮点型
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// 字符串
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?>
位运算符
# [php--关于位运算符](http://www.cnblogs.com/exceed/p/5034760.html)
常见四个位运算符:&(按位与),|(按位或),^(按位异或),~(按位取反)
&(按位与):对应位同时为1时,在&运算后则为1,否则为0
|(按位或):对应位有一个为1时,在|运算后则为1,同为0时则为0
^(按位异或):对应位不同时为1时,在^运算后为1,同时为0时则为0,同时为1时^运算后也是0
~(按位取反):$a+(~$a)=-1
在计算机中,负数以其正值的补码形式表达。
在这里我们就要知道三个概念了,原码,反码和补码。
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
8的原码为:0000 0000 0000 0000 0000 0000 0000 1000
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。取反操作指:1变0, 0变1。
8按位取反:1111 1111 1111 1111 1111 1111 1111 0111
补码:反码加1称为补码。也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
正数的补码与其原码相同;负数的补码是在其反码的末位加1
反码加1:1000 0000 0000 0000 0000 0000 000 1001;这样就得负数的正值的补码形式。也就是-9了。
参考:http://www.cnblogs.com/setsail/archive/2013/05/22/3093542.html
http://my.oschina.net/WarRome/blog/90707
以上解释自己也没有看的太懂,但实践得出$a+(~$a)=-1
小例如下:
<?php
$m=8;
$n=12;
$p=-109;
$mn=$m&$n;
echo $mn."<br>";
$mn=$m|$n;
echo $mn."<br>";
$mn=$m^$n;
echo $mn."<br>";
$mn=~$m;
echo $mn."<br>";
$mn=~$p;
echo $mn."<br>";
?>
输出结果:
8
12
4
-9
108
关于按位取反的问题,再琢磨琢磨
运算符优先级
结合方向 |
运算符 |
附加信息 |
无 |
clone new |
clone 和 new |
左 |
[ |
array() |
右 |
++ — ~ (int) (float) (string) (array) (object) (bool) @ |
类型和递增/递减 |
无 |
instanceof |
类型 |
右 |
! |
逻辑运算符 |
左 |
* / % |
算术运算符 |
左 |
+ – . |
算术运算符和字符串运算符 |
左 |
<< >> |
位运算符 |
无 |
== != === !== <> |
比较运算符 |
左 |
& |
位运算符和引用 |
左 |
^ |
位运算符 |
左 |
| |
位运算符 |
左 |
&& |
逻辑运算符 |
左 |
| |
逻辑运算符 |
左 |
? : |
三元运算符 |
右 |
= += -= *= /= .= %= &= |= ^= <<= >>= => |
赋值运算符 |
左 |
and |
逻辑运算符 |
左 |
xor |
逻辑运算符 |
左 |
or |
逻辑运算符 |
左 |
, |
多处用到 |
注:整理来看优先级,算术 > 位 > 逻辑 > 赋值