PHP学习 Day_04


运算符

算数运算符

  • 用来处理算数运算。如加、减、乘、除和求余(取模)
<?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和 b都为真时返回真,否则为假
||或or (逻辑或) $a||$b a a和 b都为假时返回假,否则为真
xor(逻辑异或) $axor$b 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 逻辑运算符 或 左到右
, 列表分割符 左到右

小结

  1. 算数运算符取模时,结果的符号与被除数相同,运算数中有小数时,去尾再运算
  2. 赋值运算符是先计算右边,再把值赋给左边的变量
  3. 逻辑运算符和比较运算符中,要注意短路运算
  4. 在涉及到运算符优先级时,可以多加括弧,降低出错概率

以上内容均属原创,如有不详或错误,敬请指出。
本文作者: 坏坏
发布了21 篇原创文章 · 获赞 7 · 访问量 2816

猜你喜欢

转载自blog.csdn.net/qq_45668124/article/details/104638367