运算符
算数运算符
- 用来处理算数运算。如加、减、乘、除和求余(取模)
<?php
$a=4;
$b=5;
$c=$a+$b;
$d=$a-$b;
$e=$a*$b;
$f=$a/$b; //实型结果
echo "$c <br/>";
echo "$d <br/>";
echo "$e <br/>";
echo "$f <br/>";
?>
运算结果:
9
-1
20
0.8
- 求余数的正负结果与被除数相同,如果运算中含有小数,去尾后再运算
<?php
$a=4;
$b=5;
$c=$a%$b; //商为0,余数为4
$d=$b%$a; //商为1,余数为1
$e=(-8)*3; //商为-2,余数为-2
$f=(-8)/(-3); //商为2,余数为-2
$g=12.5%(-5.5); //去尾,即12%(-5)。商为-2,余数为2
echo "$c <br/>";
echo "$d <br/>";
echo "$e <br/>";
echo "$f <br/>";
echo "$g <br/>";
?>
运算结果:
4
1
-2
-2
2
- 取模时,运算结果一定比第二个变量小。
- 含有一个负数时,运算结果与第一个变量的符号保持一致
- 当有小数时,去掉小数部分,再进行取模
字符串运算符
- 字符运算符只有一个,即连接两个字符串的
.
<?php
$a="Hello";
$b="Bad";
$c=$a.$b;
echo $c;
?>
运算结果:
HelloBad
赋值运算符
- 将赋值号右边的表达式的值赋给左边的变量
操作 | 符号 | 例 | 展开式 | 含义 |
---|---|---|---|---|
赋值 | = | $a=exp; | $a=exp; | 将右边的值赋给左边 |
加 | += | $a+=exp; | $a=$a+exp; | 先计算出exp,然后加$a,再将值赋给左边 |
减 | -= | $a-=exp; | $a=$a-exp; | 先计算出exp,然后减$a,再将值赋给左边 |
乘 | *= | $a*=exp; | $a=$a*exp; | 先计算出exp,然后乘以$a,再将值赋给左边 |
除 | /= | $a/=exp; | $a=$a/exp; | 先计算出exp,然后除以$a,再将值赋给左边 |
连接 | .= | $a.=exp; | $a=$a.exp | 先计算出exp,然后将$a与exp连接,再将值赋给左边 |
取模 | %= | $a%=exp; | $a=$a%exp; | 先计算出exp,然后计算$a%exp的模,再将值赋给左边 |
<?php
//使用utf-8编码,不然可能会出现乱码
header("Content-Type:text/html;charset=utf-8");
$a=2+3*5; //值为17
echo '$a的值为:'.$a."<br/>";
$a+=3+4; //$a=17+(3+4),值为24
echo '$a+=的值为:'.$a."<br/>";
$b=2;
$b-=3+4; //$b=2-(3+4),值为-5
echo '$b-=的值为:'.$b."<br/>";
$b*=2+3; //$b*(2+3),值为-25
echo '$b*=的值为:'.$b."<br/>";
$c=5;
$c/=5-4; //$c=5/(5-4),值为5
echo '$c/=的值为:'.$c."<br/>";
$c.=2+3; //$c=$c."2+3",值为55
echo '$c.=的值为:'.$c."<br/>";
var_dump($c); //查看$c的数据类型
echo "<br/>";
$d=14;
$d%=2+3; //$d=14%(2+3),值为4
echo '$d%=的值为:'.$d."<br/>";
$e=$f=5; //先将5赋值给$f,再将$f赋值给$e,值为5
echo '$e的值为:'.$e."<br/>";
echo '$f的值为:'.$f."<br/>";
?>
运算结果:
$a的值为:17
$a+=的值为:24
$b-=的值为:-5
$b*=的值为:-25
$c/=的值为:5
$c.=的值为:55
string(2) "55"
$d%=的值为:4
$e的值为:5
$f的值为:5
- 因为用了字符串连接符,所以
$c
的数据类型就会转换为字符串类型- 这里因为用了中文,所以一定要注意编码!
位运算符
- 对二进制数从高位到低位对气后进行运算
符号 | 作用 | 例 | 说明 |
---|---|---|---|
& | 按位与 | $a&$b | 只有两个都为1的时候,结果才为1。其余都为0 |
| | 按位或 | $a|$b | 只有两个都为0的时候,结果才为0。其余都为1 |
^ | 按位异或 | $a^$b | $a!=$b,两个不相同时,结果才为1。其余都为0 |
~ | 按位取反 | ~$a | 十进制数先+1,再取相反值 |
<< | 向左移位 | $a<<2 | 先将$a换成二进制数,再向左移两位,十进制数相当于乘以4 |
>> | 向右移位 | $a>>3 | 先将$a换成二进制数,再向右移三位,十进制数相当于除以8 |
注意!移位时空出的位补0
<?php
//使用utf-8编码,不然可能会出现乱码
header("Content-Type:text/html;charset=utf-8");
$a=6&5; //0110&0101,值为0100,即为十进制数4
echo '$a=6&5的值为:'.$a."<br/>";
$b=7|5; //0111|0101,值为0111,即十进制数7
echo '$b=7|5的值为:'.$b."<br/>";
$c=8^4; //1000^0100,值为1100,即十进制数12
echo '$c=8^4的值为:'.$c."<br/>";
$d=~7; //0111,去反为1000,最高位1表示负数,即十进制数-8
echo '$d=~7的值为:'.$d."<br/>";
$e=6<<2; //00000110,左移两位,即00011000,即十进制数24
echo '$e=6<<2的值为:'.$e."<br/>";
$f=8>>3; //1000,右移三位,即0001,即十进制数1
echo '$f=8>>3的值为:'.$f."<br/>";
?>
运算结果:
$a=6&5的值为:4
$b=7|5的值为:7
$c=8^4的值为:12
$d=~7的值为:-8
$e=6<<2的值为:24
$f=8>>3的值为:1
- 在与、或、异或运算时,要换算成二进制数计算得出结果
- 在取反、移位运算时,可以换算成二进制数计算,也可以用算数运算得出结果
递增递减运算符
- 用于单个变量自增1或自减1
++
递增运算符--
递减运算符
<?php
//使用utf-8编码,不然可能会出现乱码
header("Content-Type:text/html;charset=utf-8");
$a=5;
echo '$a++的值为:'.$a++."<br/>"; //先输出5,$a在+1
# 因为上面的计算,$a=6,下面的计算$a值为6
echo '++$a的值为:'.++$a."<br/>"; //$a先+1,在输出7
$b=5;
$c=--$b- --$b; //先计算--$b的值为4,再自减1为3,即$c=4-3,输出值为1
echo '--$b- --$b的值为:'.$c."<br/>";
?>
运算结果:
$a++的值为:5
++$a的值为:7
--$b- --$b的值为:1
- 在使用连续的–运算符时(如上的$c),中间要用空格空隔开,或者用括号包含变量
- 递增递减运算符只能用于单个变量,不能用于多个变量,如
$a=++($b+$c)
逻辑运算符
- 用于处理逻辑运算
运算符 | 例 | 说明 |
---|---|---|
&&或and(逻辑与) | $a&&$b | a和a和a和b都为真时返回真,否则为假 |
||或or (逻辑或) | $a||$b | a和a和a和b都为假时返回假,否则为真 |
xor(逻辑异或) | $axor$b | a和a和a和b不相同时返回真,否则为假 |
!(逻辑非) | !$a | $a为真时!$a为假,$a为假时!$a为真 |
<?php
//使用utf-8编码,不然可能会出现乱码
header("Content-Type:text/html;charset=utf-8");
$a=true;
$b=false;
# 逻辑与,都为真时返回真,否则为假。(&&与and作用相同)
if($a and $b) //条件不成立
echo '两个都为真';
else
echo '至少有一个为假'; //输出
echo "<br/>";
# 逻辑或,都为假时返回假,否则为真。(||与or作用相同)
if ($a or $b) //条件成立
echo '至少有一个为真'; //输出
else
echo '两个都为假';
echo "<br/>";
# 逻辑异或,不相同时返回真
if($a xor $b) //条件成立
echo '$a不等于$b'; //输出
else
echo '$a等于$b';
echo "<br/>";
# 逻辑非,$a为真时,!$a为假
if(!$a) //条件不成立
echo '$a为假';
else
echo '$a为真'; //输出
?>
运算结果:
至少有一个为假
至少有一个为真
$a不等于$b
$a为真
这里的逻辑运算符和我们数学中的真假命题是一样的
比较运算符
- 用于比较两个数据的值,返回一个布尔类型的结果
运算符 | 意义 | 例 | 说明 |
---|---|---|---|
< | 小于 | $a<$b | $a小于$b时,返回true,否则返回false |
> | 小于 | $a>$b | $a大于$b时,返回true,否则返回false |
<= | 小于或等于 | $a<=$b | $a小于或等于$b时,返回true,否则返回false |
>= | 大于或等于 | $a>=$b | $a大于或等于$b时,返回true,否则返回false |
== | 相等 | $a==$b | $a等于$b时,返回true,否则返回false |
!= | 不相等 | $a!=$b | $a不等于$b时,返回true,否则返回false |
=== | 恒等 | $a===$b | $a与$b相等且数据类型相同时,返回true,否则返回false |
!== | 非恒等 | $a!=$b | $a与$b值不相等或数据类型不相同时,返回true,否则返回false |
<?php
//使用utf-8编码,不然可能会出现乱码
header("Content-Type:text/html;charset=utf-8");
$a=55;
$b=55.0;
$c=50;
# 判断$a是否大于$c
if($a>$c) //条件成立
echo '$a大于$c'; //输出
else
echo '$c大于$a';
echo "<br/>";
# 判断$a是否小于$c
if($a<$c) //条件不成立
echo '$a小于$c';
else
echo '$c小于$a'; //输出
echo "<br/>";
# 判断$a是否小于等于$c
if($a<=$c) //条件不成立
echo '$a小于或等于$c';
else
echo '$a大于$c'; //输出
echo "<br/>";
# 判断$a是否大于等于$c
if($a>=$c) //条件成立
echo '$a大于或等于$c'; //输出
else
echo '$a小于$c';
echo "<br/>";
# 判断$a是否等于$c
if($a==$c) //条件不成立
echo '$a等于$c';
else
echo '$a不等于$c'; //输出
echo "<br/>";
# 判断$a是否小于等于$c
if($a!=$c) //条件成立
echo '$a不等于$c'; //输出
else
echo '$a等于$c';
echo "<br/>";
if($a===$b) //条件不成立
echo '$a等于$b,且数据类型相同';
else
echo '$a不等于$b,或数据类型不相同'; //输出
echo "<br/>";
if($a!==$b) //条件成立
echo '$a不等于$b,或数据类型不相同'; //输出
else
echo '$a等于$b,且数据类型相同';
echo "<br/>";
?>
运行结果:
$a大于$c
$c小于$a
$a大于$c
$a大于或等于$c
$a不等于$c
$a不等于$c
$a不等于$b,或数据类型不相同
$a不等于$b,或数据类型不相同
短路运算
- 如果一个条件由多个条件组成,若已经判断出整个条件的结果,则无需判断后面的条件
- 在进行或运算时,第一个条件成立了,就不再判断第二个条件是否成立
- 在进行与运时,第一个条件成立了,还需要判断第二个条件是否成立。如果第一个条件不成立,也不再判断第二个条件是否成立
三元运算符
- 提供简单的逻辑判断
- 格式:
表达式1?表达式2:表达式3
- 如果表达式1成立,整个表达式的值为表达式2的值,否则为表达式3的值
<?php
//使用utf-8编码,不然可能会出现乱码
header("Content-Type:text/html;charset=utf-8");
$a=15;
$b=25;
# 首先判断$a是否大于$b,成立则输出$a的值,不成立则输出$b的值
$c=($a>$b)?$a:$b; //可以用来计算最大值
echo $c."<br/>";
# 首先判断$st是否为字符串类型,是则输出“我是坏坏!”,不是则输出“我不是字符串!”
$st="This is string!";
$d=(is_string($st))?"我是坏坏!":"我不是字符串!";
echo $d;
?>
运算符优先级
- 与算术运算符中的先乘除后加减相同。可以加圆括号改变运算顺序
运算符 | 作用 | 结合方向 |
---|---|---|
++、– | 递增、递减 | 非结合 |
!、~ | 逻辑非、位求反 | 非结合 |
(int)(float)等 | 强制转换数据类型 | 非结合 |
*、/、% | 乘、除、求余 | 左到右 |
+、-、. | 加、减、拼接 | 左到右 |
<<、>> | 位移 | 左到右 |
<=、>= | 小于等于、大于等于 | 非结合 |
==、!= | 等于、不等于 | 非结合 |
=== 、!== | 恒等于、非恒等 | 左到右 |
& | 位运算符 与 | 左到右 |
^ | 位运算符 异或 | 左到右 |
| | 位运算符 或 | 左到右 |
&& | 逻辑运算符 与 | 左到右 |
|| | 逻辑运算符 或 | 左到右 |
? : | 三元运算符 | 左到右 |
=、+=、-= | 赋值运算符 赋值、加、减 | 右到左 |
and | 逻辑运算符 与 | 左到右 |
xor | 逻辑运算符 异或 | 左到右 |
or | 逻辑运算符 或 | 左到右 |
, | 列表分割符 | 左到右 |
小结
- 算数运算符取模时,结果的符号与被除数相同,运算数中有小数时,去尾再运算
- 赋值运算符是先计算右边,再把值赋给左边的变量
- 逻辑运算符和比较运算符中,要注意短路运算
- 在涉及到运算符优先级时,可以多加括弧,降低出错概率
以上内容均属原创,如有不详或错误,敬请指出。
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!