美文网首页17.11 PHP入门
06 运算符、管理一组开关状态

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

作者: 海野夏桑 | 来源:发表于2017-12-12 23:44 被阅读15次

    一.算数运算符

    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 . "是亮的 <br>";
            }else{
                echo "灯泡" . $i . "是灭的 <br>";
            }
        }
    }
    //运行可得出相应的结果
    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 运算符、管理一组开关状态

        本文链接:https://www.haomeiwen.com/subject/qjweixtx.html