一、赋值运算符“=”
- “=”将赋值号右边的值赋值给左边的变量,左边的必须是变量不能是式子
二、算术运算符“+”、“-”、“*”、“/”、“%”
- “%”取模(取余),求两个数相除,除不尽的部分
<?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 ?>