zoukankan      html  css  js  c++  java
  • 0920逻辑运算符,位运算,移位运算,三元运算符,短路性注意点

    $a = $b++;

    $a = $b;

    $b= $b + 1;

     

    $a = ++$b;

    $b = $b + 1;

    $a = $b;

     
    xor 相同为false,不同为true

    三元运算符 (expr1)?(expr2):(expr3);


    我们知道,计算机里的信息,都是以0,1来存储的.
    一个可以存储0/1的单元,称为位bit

    8个位组成一个字节,Byte,
    字节是计算机里最基本的单位

     位运算

    12 = 0000 1100
    5 = 0000 0101
    ----&---------
    0000 0100
    12 & 5 = 4;


    12 = 0000 1100
    5 = 0000 0101
    ----|---------
    0000 1101

    12 | 5 = 13;


    12 = 0000 1100
    5 = 0000 0101
    ----^---------
    0000 1001

    12 ^ 5 = 9;

    & ,把2个二进制值对齐, 把1看成ture,把0看成false, 然后每个位上都做 并且 的运算 ,
    | ,把2个二进制值对齐, 把1看成ture,把0看成false, 然后每个位上都做 或者 的运算 ,
    ^ ,把2个二进制值对齐, 把1看成ture,把0看成false, 然后每个位上都做 异或 的运算 ,



    $a = 0000 1100;
    按位求反~


    0000 1100
    ~-----------
    1111 0011



    计算机里表示负数,是用补码的规则来计算的


    具体这样来计算负数,假设有8位
    最高位是1 得出符号是负

    开始补码规则
    计算除符号位之外,其他7位的绝对值
    ()111 0011 = 115;

    然后再把 绝对值 - 2^7 = 115 - 128 = -13


    因此:

    1000 0001 ===> 不要想当然是 -1
    而是 1 - 128 = -127

    1111 1111 ===>
    111 111==127 - 128 = -1


    1000 0000 ==> -128
    1111 1111 ===> -1
    0000 0000 ===> 0
    0111 1111 ====> 127

    为什么 有人问: -128 +127

    直观来理解 -127 -0,+0,+127



    // 移位运算

    5 = 0000 0101;
    5 << 1;

    0000 1010; // 10
    相当于*2的效果

    echo 5 << 1;

     



    5 = 0000 0101
    5 >>1 = 0000 0010 = 2;
    相当于除2的效果

    echo 5 >> 1;



    $a = true;

    $a++;++$a;不会影响bool的值

    $a ----> bool(true);

    三元运算符 与 if else的效率问题

  • 相关阅读:
    多模块javaweb项目构建tomcat部署
    html页面基于ajax按钮60秒倒计时
    java面向对象六原则一法则
    sessionStorage 和 localStorage 、cookie
    Is-A,Has-A,Use-A(转载)
    多例模式
    java变量类型
    单例模式
    How to modify a compiled Android application (.apk file)
    Unity3D 绘制扇形/环形
  • 原文地址:https://www.cnblogs.com/zy2012/p/3359651.html
Copyright © 2011-2022 走看看