Loading

PHP运算符

一、赋值运算符“=”

  • “=”将赋值号右边的值赋值给左边的变量,左边的必须是变量不能是式子

二、算术运算符“+”、“-”、“*”、“/”、“%”

  • “%”取模(取余),求两个数相除,除不尽的部分

 

<?php
   $i=5;
   $result=$i%3;
   echo $result;//2
?>

 

三、自操作运算符“++”、“--”、“+=”、“-=”、“*=”、“/=”、“%=”

  • "++"自增运算符

  ①后自增:变量++:先取内存中变量的值,放在式子中,再对变量的值加1(先参与运算,后加1)

 

<?php
   $v=10;
   $result= $v++;
   echo $result;//10
   echo $v;//11
?>

 

  ②前自增:++变量:先更改内存中变量的值,再将新值读取到这个式子中(先加1,后参与运算)

 

<?php
   $v=10;
   $result= ++$v;
   echo $result;//11
   echo $v;//11
?>

 

  • "--"自减运算符

  ①后自减:变量--:先取内存中变量的值,放在式子中,再对变量的值减1(先参与运算,后减1)

 

<?php
   $v=10;
   $result= $v--;
   echo $result;//10
   echo $v;//9
?>

 

  ②前自减:--变量:先更改内存中变量的值,再将新值读取到这个式子中(先减1,后参与运算)

 

<?php
   $v=10;
   $result= --$v;
   echo $result;//9
   echo $v;//9
?>

 

  • “+=”、“-=”、“*=”、“/=”、“%=”  

  • 扩展一个例子

四、字符串拼接符“.”“.=”

  • 拼接一个表格
<?php
   $tab = "<table border=1 rules='all'>";
   $tab .= "<tr>";
   $tab .= "<td>数据</td><td>数据</td><td>数据</td>";
   $tab .= "</tr>";
   $tab .= "<tr>";
   $tab .= "<td>数据</td><td>数据</td><td>数据</td>";
   $tab .= "</tr>";
   $tab .= "<tr>";
   $tab .= "<td>数据</td><td>数据</td><td>数据</td>";
   $tab .= "</tr>";
   $tab .= "</table>";
   echo $tab;
?>

  • 如果.接收一个数值,数值与.之间要有空格

五、比较运算符“>”、“<”、“>=”、“<=”、“==”、“===”、“!=”、“!==”

  • "=="用于判断两个数的值是否相等,取反是"!="
  • ''===''用于判断变量的值与类型是否都相等,取反是"!=="
  • 比较运算符得到的最终结果是Boolean类型的值

六、逻辑运算符"&&" "||" "!" "and" "or"

  • "&&"逻辑与

①真值运算规则:参与运算的两个操作数,全部为true或者能够转为true,那么最终的结果才是true(全真则真)

②假值运算规则:参与运算的两个操作数,只要有一个为false或者能够转为false,那么最终的结果就是false(有假则假)

③逻辑与短路

  • "||"逻辑或

①真值运算规则:参与运算的两个操作数,全部为false或者能够转为false,那么最终的结果才是false(全假则假)

②假值运算规则:参与运算的两个操作数,只要有一个为true或者能够转为true,那么最终的结果就是true(有真则真)

③逻辑或短路

  • "!"逻辑非:对操作数据进行取反

  • "and"逻辑与:运算规则与&&运算规则相同,唯一的区别就是&&的优先级高于=,而and的优先级低于=

 

<?php
   $v1 = 10;
   $v2 = false;
   $result = $v1 && $v2;
   var_dump($result);//bool(false)

   $result = $v1 and $v2;
   var_dump($result);//int(10)
?>

 

  • "or"逻辑或:运算规则与 || 运算规则相同,唯一的区别就是 || 的优先级高于=,而and的优先级低于=

 

<?php
   $v1 = 10;
   $v2 = false;
   $result = $v1 || $v2;
   var_dump($result);//bool(true)

   $result = $v1 or $v2;
   var_dump($result);//int(10)
?>

 

  • 补充:运算符的优先级(在一个式子中出现多种运算符时,运算之间会有优先级),口诀:单、算、关、逻、条、赋、and和or、逗

七、条件运算符(三元运算符)

  • 表达式?表达式A:表达式B-----先计算表达式是否成立,成立取表达式A,不成立取表达式B

 

<?php
   $v1 = 10;
   $v2 = 20;
   $v3 = 30;
   $result = $v1>$v2?$v1:$v2;
   $max = $result>$v3?$result:$v3;
   echo $max;//30
?>

 

  • 扩展:变量?:表达式B-----如果变量能转换为true,那么就取变量,佛则取表达式B

 

<?php
   $v1 = 10;
   $result = $v1?:30;
   echo $result;//10
?>

 

八、错误控制运算符

  • "@"错误抑制符,作用是不显示错误信息

  • php.ini中隐藏错误(全局配置)

  • 脚本级的错误控制:仅仅作用于当前的PHP脚本文件

   ①ini_set(配置项名,值)用于设置配置项的值

  ②ini_get(配置项名)用于获取配置项的值

九、位运算符"|" "&" "^" "~" "<<" ">>''

  • "|"按位或:参与运算的两个操作数的二进制形式对应的位进行或运算,位只要有一个为1,最终结果位就是1,如果都为0,最终结果位是0

 

<?php
   $v1 = 10;             //    01010 二进制
   $v2 = 20;             //    10100 二进制          
   $result= $v1 | $v2;   //    11110 二进制
   echo $result;         //    30    十进制
?>

 

  • "&"按位与:参与运算的两个操作数的二进制形式对应的位进行与运算,位只要有一个为0,最终结果位就是0,如果都为1,最终结果位是1

 

<?php
   $v1 = 10;             //    01010 二进制
   $v2 = 20;             //    10100 二进制          
   $result= $v1 & $v2;   //    00000 二进制
   echo $result;         //    0     十进制
?>

 

  • "^"按位异或:参与运算的两个操作数的二进制形式对应的位,如果相同,结果位为0,不同则为1

 

<?php
   $v1 = 10;             //    01010 二进制
   $v2 = 20;             //    10100 二进制          
   $result= $v1 ^ $v2;   //    11110 二进制
   echo $result;         //    30     十进制
?>

 

  • "~"按位非:参与运算的两个操作数的二进制形式对应的位进行取反

 

<?php
   $v1 = 1;             //    0000000000000000001 二进制          
   $result = ~ $v1;     //    1111111111111111110 内存中按位取反后的二进制形式(补码)
                        //    1111111111111111101 (补码反推)反码  
                        //    0000000000000000010 (反码反推)原码

   echo $result;        //    -2                  十进制
?>

 

  • "<<"左移:对二进制数据整体向左移指定的位置,左移左侧移出要被忽略,右侧补0;可以快速对一个数加位

 

<?php
   $v = 1;             //    0000000000000000001 二进制          
   $result = $v<<1;    //    0000000000000000010---->2
   $result = $v<<2;    //    0000000000000000100---->4
   $result = $v<<3;    //    0000000000000001000---->8
   $result = $v<<4;    //    0000000000000010000---->16
?>

 

  • ">>''右移:对二进制数据整体向右移指定的位置,右移右侧移出要被忽略,左侧补0;可以快速对一个数减位

 

<?php
   $v = 16;             //   0000000000000010000二进制          
   $result = $v>>1;    //    0000000000000001000---->8
   $result = $v>>2;    //    0000000000000000100---->4
   $result = $v>>3;    //    0000000000000000010---->2
   $result = $v>>4;    //    0000000000000000001---->1
?>

 

十、扩展:原码、反码和补码

  • 原码:就是带有正负号的二进制数;在计算机内所有的信息的表示都是使用0和1表示的,正负号也不例外;人们规定,如果是负数,在最高位使用0表示+,如果是负数在最高位使用1表示
  • 反码:正数的反码与原码相同,负数的反码,最高位得符号位不变,其余位取反
  • 补码:正数的补码与原码相同,负数的补码在反码的基础上加1
  • 结论:

  ①以上只是在内存中的一个表现形式,最终在显示时还要转为十进制

   ②对于正数,原码到反码到补码,没有任何的变动,所以二进制对应的十进制数即可

   ③对于负数,先由补码反推出反码,再由反码反推出原码,再将原码转为十进制

 

十一、扩展例子:两个数互换位置

  • 方法1:借助第三个变量
<?php
   $v1=10;
   $v2=20;
   $tmp=$v1;
   $v1=$v2;
   $v2=$tmp;
   echo $v1;//20
   echo $v2;//10
?>
  • 方法2:两数相加法
<?php
   $v1=10;
   $v2=20;
   $v1=$v1+$v2;
   $v2=$v1-$v2;
   $v1=$v1-$v2;
   echo $v1;//20
   echo $v2;//10
?>
  • 方法3:按位异或法
<?php
   $v1=10;             //01010
   $v2=20;             //10100
   $v1=$v1^$v2;        //11110----$v1(新)
                       //10100----$v2
   $v2=$v1^$v2;        //01010----$v2(结果)-------10
                       //11110----$v1(新)
   $v1=$v1^$v2;        //10100----$v1(结果)-------20
   echo $v1;//20
   echo $v2;//10
?>

 

posted @ 2018-06-07 11:01  澎湃_L  阅读(402)  评论(0编辑  收藏  举报