zoukankan      html  css  js  c++  java
  • 位运算笔记

    一、二进制

    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

    如果您觉得本文对您的学习有所帮助,可通过支付宝来打赏博主,增加博主的写作动力

  • 相关阅读:
    我看这篇对初学者很有帮助就转载了 Web.config (转载)
    自动开关机
    想换个地方了
    浅析软件项目管理中十个误区
    如何结束测试员和程序员之间的战争
    程序员四大忌 你该如何避免?(2006.01.13 来自:希赛)
    完整的变更请求管理解决方案
    情人节,我加班
    需求分析,你呀你!(源自Linuxaid.com.cn )
    转贴一篇对技术人员的十大忠告,希望新的一年有所提升!
  • 原文地址:https://www.cnblogs.com/luyucheng/p/5988100.html
Copyright © 2011-2022 走看看