• 位运算笔记


    一、二进制

    1. 二进制的最高位是符号位:0表示正数,1表示负数
    2. 正数 的源码反码,补码,都一样
    3. 负数的反码=它的源码 符号 位不变,其它位取反(0->1,1->0)
    4. 负数的补码=它的反码+1
    5. 0的反码补码都是0
    6. php没有无符号数
    7. 在计算机 运算 的时候,都是以补码的方式来运算的

    例:
    -1 的源码 10000000 00000000 00000000 00000001
    -1 的反码 11111111 11111111 11111111 11111110
    -1 的补码 11111111 11111111 11111111 11111111

    二、位运算

    1. 按位与& :两位全为1,结果为1
    2. 按位或| :两位有一个为1,结果为1
    3. 按位异或^:两位一个为0,1个为1,结果为1
    4. 按位取反~:0->1,1->0
    5. 右移>>:向右移动n次(除以2的n次方),低位溢出,并用符号位补溢出的高位,符号位不变
    6. 左移<<:向左移动n次(乘以2的n次方),低位补0,符号位不变

    例&:
    2&3=?
    2的补码 00000000 00000000 00000000 00000010
    3的补码 00000000 00000000 00000000 00000011
    2&3的补码 00000000 00000000 00000000 00000010(补码)

    例|:
    2的补码 00000000 00000000 00000000 00000010
    3的补码 00000000 00000000 00000000 00000011
    2|3 00000000 00000000 00000000 00000011

    例^:
    2的补码 00000000 00000000 00000000 00000010
    3的补码 00000000 00000000 00000000 00000011
    2^3 00000000 00000000 00000000 00000001

    例~:
    ~2=?
    步骤:
    1.首先求出2的补码,2是整数,所以 原码=反码=补码 
    00000000 00000000 00000000 00000010
    2.取反后,为 ?的补码
    11111111 11111111 11111111 11111101
    3.?的补码-1,为 ?的反码
    11111111 11111111 11111111 11111100
    4.?的反码取反,为 ?的值
    10000000 00000000 00000000 00000011 => -3

    例>>:
    1>>2=?
    1的补码 00000000 00000000 00000000 00000001
    右移2位 00(<补位)00000000 00000000 00000000 000000(截断)01

    例>>:
    -1>>2=?
    -1的原码 10000000 00000000 00000000 00000001
    -1的反码 11111111 11111111 11111111 11111110
    -1的补码 11111111 11111111 11111111 11111111
    右移2位 11111111 11111111 11111111 11111111(补码)
    补码-1 11111111 11111111 11111111 11111110(反码)
    取反码 10000000 00000000 00000000 00000001

    例<<:
    1<<2=?
    1的补码 00000000 00000000 00000000 00000001
    左移2位 00(截断)000000 00000000 00000000 00000001(补位>)00

    例<<:
    -1<<2=?
    -1的原码 10000000 00000000 00000000 00000001
    -1的反码 11111111 11111111 11111111 11111110
    -1的补码 11111111 11111111 11111111 11111111
    左移2位 11111111 11111111 11111111 11111100(补码)
    补码-1 11111111 11111111 11111111 11111011(反码)
    取反码 10000000 00000000 00000000 00000100

     
    echo 6&3;//2
    echo "<br>";
    echo 6|3;//7
    echo "<br>";
    echo 6^3;//5
    echo "<br>";
    echo ~6;//-7
    echo "<br>";
    echo 6>>3;//0
    echo "<br>";
    echo 6<<3;//48
    echo "<br>";
    
    echo -6&3;//2
    echo "<br>";
    echo -6|3;//-5
    echo "<br>";
    echo -6^3;//-7
    echo "<br>";
    echo ~-6;//5
    echo "<br>";
    echo -6>>3;//-1
    echo "<br>";
    echo -6<<3;//48
     
  • 相关阅读:
    ByteArrayInputStream&ByteArrayOutputStream源码分析
    常用FastJSON的SerializerFeature特性及日期转换格式
    SpringAware
    Zuul(SpringCloud学习笔记一)
    RabbitMQ和SpringBoot的简单整合列子
    Cngigure和BUS实现远端配置
    vagrant安装homestead环境使用总结
    sublime安装插件
    vagrant配置(假设已经安装好了vagrant并且下载好了box)
    linux php安装配置oci8模块
  • 原文地址:https://www.cnblogs.com/quanzhiguo/p/7157981.html
Copyright © 2020-2023  润新知