06 运算符、管理一组开关状态

一.算数运算符

1. 加减乘除余
2.自增自减 ++ 、--
  • 常规对数字使用
  • 对字符串使用,只能自增,自增效果规则和纯数字的自增规则一样
$v1 = "a";
$v1 ++;     //b

$v2 = "A";
$v2 ++;     //B

$v3 = "abc";
$v3 ++;     //abd

$v4 = "xyz";
$v4 ++;     //xza

$v5 = "xyzz";
$v5 ++;     //xzaa

$v6 = "zzz";
$v6 ++;     //aaa

$v7 = "abc9";
$v7 ++;     //abd0

$v8 = "9z";
$v8 ++;     //10a 
  • 布尔值自增自减都无效
  • null自增结果是1,自减无效

二.比较运算符

>=、<=、>、<、==、===、!=、!==

1.布尔值比较,永远都是 true > false
2.字符串比较,对于两边的字符,从前往后、一个一个的取出字符进行比较。字母大于任何的数字。
"abc" > "c";    //false
//取a,取c,a < c,false,终
"abc" > "ab1efefrg"    //true
//1.取a,取a,a=a,往后;2.取b,取b,b=b,往后;3.取c,取1,c > 1,true,终

(字符的比较,实际上就是字符编码的比较,理论上中文也是可以比较的?记住几个特殊的字符编码。数字0:48;大写A:65;小写a:97

三.逻辑运算符

  • 与、或、非
  • 短路与、短路或现象,我们利用这种现象,将简单的运算放在前面,复杂的运算放在后面。优化性能。

四.连接、赋值、条件运算符

1.连接运算符 .
2.连接运算符 .=

两边是字符串就连起来,不是的话,就转换成字符串再连起来

3.赋值运算符(基本) =
4.赋值运算符(衍生)+= 、 -= 、 *= 、 /= 、 %= 、 .=
5.三元运算符,条件?执行1 : 执行2


五.位运算符

  • “位”就是二进制的每一个位,一个整数由32个位组成
  • 位运算符是仅仅针对整数进行的,运算结果还是一个数字
  • 有这么 4个基本运算符 ,&(按位与)、|(按位或)、~(按位非)、^(按位异或,相同为0,不同为1)
  • 非基本运算符
    1.按位左移,<<,左移多少位,左边溢出的不管,右边空出来的补0
    2.按位有义,>>
  • 原码,补码,反码
    1.源码,二进制数字最左边一位是符号位。整数0,负数1。所以表示一个整数,其实只有31位可用?
    //5的原码
    00000000 00000000 00000000 00000101
    
    //-3的原码
    10000000 00000000 00000000 00000011
    

2.反码。正数反码是它本身;负数反码符号位不变,其他位取反
3.补码。正数补码也是它本身!负数补码符号位不变,而其他位取反后加1、即反码加1
(计算机内部运算全部用补码进行运算,并且运算的时候符号位不再区分,也参与运算)

cpu运算演示.PNG


六.管理一组开关状态

现实中很多数据只有两种情况,是或者否,对应我们的布尔值。所以我们其实是管理若干个只有两个状态的数据符号。
管理目标:使用一个变量就可以表达若干个数据的当前状态,这里具有三个目标

  • 通过该变量,可以获取任何一个数据的当前状态
  • 通过该变量,可以“关闭”该数据状态
  • 通过该变量。可以“开启”该数据状态
以下以5个灯泡为例,每个灯泡为一组数据,每个灯泡都有开和关两种状态。
//设定5个常量,对应每一个灯泡。观察其二进制上的位数状态,设定 1 是亮, 0 是灭
define("D1", 1);        //对应二进制00000001
define("D2", 2);        //对应二进制00000010
define("D3", 4);        //对应二进制00000100
define("D4", 8);        //对应二进制00001000
define("D5", 16);       //对应二进制00010000
//定义一个变量,代表这5个灯泡的任意状态组合
$status = 10;       //对应二进制00001010
                    //它表示第2个、第4个灯泡亮
1.获取当前5个灯泡的状态
//进行运算得出灯泡状态
//第1个灯泡
if($status & D1 > 0){
    echo "灯泡1亮";
}else{
    echo "灯泡1灭";
}
//以同样的运算可以得出其他4个灯泡的状态
//整理成一个函数
function status(){
    for($i = 1; $i < 6; $i ++){
        $s = "D" . $i;
        if((constant($s) & $GLOBALS['status']) > 0){
            echo "灯泡" . $i . "是亮的 
"; }else{ echo "灯泡" . $i . "是灭的
"; } } } //运行可得出相应的结果 status(10);
2.打开任意一个灯泡
//打开灯1
$status = $status | D1;
//验证
status(10);

//打开灯5
$status = $status | D5;
//验证
status(10);
3.关闭任意一个灯泡
//关闭灯2
$status = $status & (~D2);
//验证
status(10);


七.数组运算符

  • 数组联合运算符,+,将右边的数组加到左边,得到一个新的数组;如果有重复的键,以左边的为准。
$arr1 = array('a'=>10, 'b'=>10, 'c'=>30);
$arr2 = array('a'=>40, 'b'=>50, 'd'=>60);
$arr = $arr1 + $arr2;
print_r($arr1);
  • 运算符==,键名键值相同即可true,顺序不必相同
  • 运算符===,要求顺序也必须相同
  • 运算符!=,不要求顺序
  • 运算符!==,要求顺序

八.错误控制运算符

通常就用开一个地方而已啦,链接数据库时

$link = @$my_sqli("数据库地址", "用户", "密码")

用以链接失败时,屏蔽该失败的错误提示

九.运算符优先级

所有运算符都是有优先级的,嘛,这个太多了,全记住太捉急了,记住重要的。

  • 括号优先

你可能感兴趣的:(06 运算符、管理一组开关状态)