zoukankan      html  css  js  c++  java
  • PHP 位运算

    位运算:

    一、先求出二进制:
    -3原码: 10000000 00000000 00000000 00000011  
    -3反码: 11111111 11111111 11111111 11111100 //取反,但符号位不变。
    -3补码: 11111111 11111111 11111111 11111101 //反码加1

    注意:
    1、正数的原码、反码、补码都是一样的。
    2、计算机运算是以补码形式进行的,故计算时先统一转成补码,计算后(补码)逆转成原码。

    二、按位与& :除去符号位,同1为1。
    例:-3&2
    -3 补码:11111111 11111111 11111111 11111101
     2 补码:00000000 00000000 00000000 00000010     
    结果补码:00000000 00000000 00000000 00000000//最高位也参与运算,因为一正一负,总得有个了断吧
         结果:0,由于正数三码统一,故处已是结果,补码即原码。

    例:-3&-6
    -3 补码:11111111 11111111 11111111 11111101
    -6 补码:11111111 11111111 11111111 11111010
    结果补码:11111111 11111111 11111111 11111000
    结果反码:11111111 11111111 11111111 11110111//补码减1
    结果原码:10000000 00000000 00000000 00001000 //反码再求反之后,-8

    总结:
    1、有正为正。
    2、在结果为负,并且左边全是1,右边全是0,则结果从最后一个 1 取到最后,即:11111000 => 1000 => 8 => -8
    2、当一个负数是2^n时,它的补码:补码等于原码有效数字所位,前补1,后补0。
    -8 => 1 <1> 000 => 11000 //当然,前面还可以补许多1,但没意义,只要位数够运算就行
    -2 => 1 <1> 00 =>  11100

    11000
    11100
    11000//结果补码,结果便是:1000 => 8 取负,-8

    三、按位或| :除去符号位,有1为1
    例:-3|-6
    -3 补码:11111101
    -6 补码:11111010
    结果补码:11111111
    结果反码:11111110//补码减1
    结果原码:00000001 //反码再求反,-1

    总结:
    1、有负为负。

    四、按位异或^ :相异为1,相同为0
    例:-3^-6
    -3 补码:11111101
    -6 补码:11111010
    结果补码:00000111//已然为正,故为7

    总结:同号为正,异号为负。

    五、按位取反~ :0、1互换
    例:~-3
    -3 补码:11111101
    结果补码:00000010//已然为正,故为2

    总结:正负相换。

    六、按位右移>> : 排除符号位,二进制数整体向右移动。

    7 >> 2 => 0111 => 0001 = 1 // 这里向右移动了2位,最低位的两个1被抹去。

    七、按位左移<< : 与上同理。
    7 << 2 => 0111 => 011100 = 28 // 这里向右移动了2位,最低位的两个1被抹去。
    总结:右移两位等于除了2的二次方,7/4 = 1 在整数除法中则看成是被舍掉了小数部分。左移就是剩以2的二次方,PHP没有无符号右移运算符>>>

  • 相关阅读:
    Golang 需要避免踩的 50 个坑(二)
    Golang 需要避免踩的 50 个坑1
    Golang两种执行流程以及区别
    go安装配置
    h5表单亲测
    HTML5-表单 自带验证
    后台日志实现
    jQuery Validate验证框架详解,提交前验证
    用cProfile做性能分析【转】
    tmux 如何翻页
  • 原文地址:https://www.cnblogs.com/zbseoag/p/2964758.html
Copyright © 2011-2022 走看看