最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • php位运算用法详细介绍

    php位运算在php中不常用到,但作用是相当大的,下面我们来介绍一下php位运算用法.

    $a & $b and(按位与)

    $a | $b or(按位或)

    $a ^ $b Xor(按位异或)

    ~$a Not(按位非)

    $a << $b Shift left(左移)

    $a >> $b Shift right(右移)

    详解

    $a & $b 按位与 把$a和$b中都为1的位设为1;

    例:10 & 12 = 8

    10 1010

    12 1100

    1000 8

    $a | $b 按位或 把$a或$b中有一个为1的为设为1;

    例:10 | 12 = 14

    10 1010

    12 1100

    1110 14

    $a ^ $b 按位异或

    例:10 ^ 12

    10 1010

    12 1100

    0110 6

    ~a 按位非 把$a中的为0的为设为1,1的为设为0

    例:~10 =

    10 1010 1111111111111111111111111111111111111111111111111111111111110101 -11

    $a << $b 左移 把$a中的为向左移动$b次(每一次移动都表示乘以2);

    例:1 << 10 = 1024

    1(1) 左移10位 10000000000(1024)

    相当于1*2的10次方,php中没有幂运算真是郁闷.

    $a >> $b 右移 把$a中的为向右移动$b次(每一次移动都表示除以2);

    例:1024 << 2 = 1256

    10000000000(1024) 右移2位就是 100000000(256)

    php为运算$a & $b and(按位与)$a | $b or(按位或)$a ^ $b Xor(按位异或)~$a Not(按位非)$a << $b Shift left(左移)$a >> $b Shift right(右移)

    详解$a & $b 按位与 把$a和$b中都为1的位设为1;例:10 & 12 = 810 101012 1100 1000 8

    $a | $b 按位或 把$a或$b中有一个为1的为设为1;例:10 | 12 = 1410 101012 1100 1110 14

    $a ^ $b 按位异或例:10 ^ 1210 101012 1100 0110 6

    ~a 按位非 把$a中的为0的为设为1,1的为设为0例:~10 = 10 1010 1111111111111111111111111111111111111111111111111111111111110101 -11

    $a << $b 左移 把$a中的为向左移动$b次(每一次移动都表示乘以2);例:1 << 10 = 10241(1) 左移10位 10000000000(1024)相当于1*2的10次方,php中没有幂运算真是郁闷.

    $a >> $b 右移 把$a中的为向右移动$b次(每一次移动都表示除以2);例:1024 << 2 = 125610000000000(1024) 右移2位就是 100000000(256)

    标志位字段与位运算符的结合

    PHP里的error_reporting的参数值列表

    value constant

    1 E_ERROR

    2 E_WARNING

    4 E_PARSE

    8 E_NOTICE

    16 E_CORE_ERROR

    32 E_CORE_WARNING

    64 E_COMPILE_ERROR

    128 E_COMPILE_WARNING

    256 E_USER_ERROR

    512 E_USER_WARNING

    1024 E_USER_NOTICE

    2047 E_ALL

    2048 E_STRICT

    4096 E_RECOVERABLE_ERROR

    发现value的值都是跳跃式的吧,而且全是2的n+1次方.

    再看下面这个.把value的值转成二进制了.

    value constant

    0000 0001 E_ERROR

    0000 0010 E_WARNING

    0000 0100 E_PARSE

    0000 1000 E_NOTICE

    0001 0000 E_CORE_ERROR

    0010 0000 E_CORE_WARNING.

    … …一次为每加一次方就是二进制加了一位(学过计算机的差不多都知道:)…)

    注意:每个选项对应了一位(1为开启 0为关闭)

    好了,下面我们看看这么设置参数的好处.

    举三个参数为例来看是什么效果吧

    error_reporting(3);//decbin(3) == 0000 0011; (相当于设置 E_WARNING 和 E_ERROR )

    error_reporting(4);//decbin(4) == 0000 0100;(相当于设置 E_PARSE )

    error_reporting(5);//decbin(5) == 0000 0101;(相当于设置 E_PARSE 和 E_ERROR)

    获取设置:

    要看某项是否开启的判断可以用位运算来获得(& — “与”规则 全1为1,否则为0)

    //E_PARSE

    if($n & 4){

    //E_PARSE开启

    //4的二进制是 0100,因为只有第3位是1,所以进行”&”操作时其它何位置全被置0了

    //因此只有$n的第三位也是1时结果才会大于0.

    //如4(0100),5(0101),6(0110),7(0111)

    }else{

    //E_PARSE关闭

    //第三位为0了就代表此选项是关闭状态

    }

    改变设置:($n代表当前的十进制值)

    在应用时我们可能跟据需要针对某位进行开关设置.

    看下面的用法.

    //关闭E_PARSE项 用 ‘&’“与”规则

    $n = $n&(8192-4-1);

    //为什么用8191呢?

    //这和你的选项数有关系,这个错误显示标记一共用了13位(4096的二进制是13位),而8192是(14位).

    //为什么减4减1呢?

    //8192-4-1=8187.(1111111111011)二进制是13位了,与我们用到的最大位数一样了.而且对应的第三位上的值是0了.

    //用这个数去和1到4096之间任何一个数按位“与”运算,是不是除了第三位会置0,其它位上的值不会变化呢? ”与”规则 :)

    //同理,想关掉 E_WARNING

    //$n = $n&(8192-2-1);

    //开启E_PARSE项用到‘|’“或”规则

    //$n = $n|4;

    //看了上面的关闭,对于开启有点想法儿了吧:)

    // ‘|’ — “或”规则 有1为1 否则为0

    //上面是所有位为1的情况下不影响其它位,现在则变成所有位为0的情况下不会影响其它位了:)

    //所以我们只要把后面的操作数的二进制位相应的值置1,其它所有位置0就OK了.

    //发现了吗?正好是我们每个设置项对应的十进制数值:)

    思路就是这样了,如果想同时操作多个位上的设置值也可以,就看你的操作数怎么设置了.

    以后开发中遇到需要一个参数同时设置多个选项的情况时我们就可以考虑一下这个方法了:)

    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » php位运算用法详细介绍

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级