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


    位运算:

      注意的规则:
        01.整数的 三个码都是一致的,不需要转换
        02.负数必须转换成补码才能运算!
        03.计算机真正参与运算的是 补码!
        04.在java中所有的数字都是有符号的! 符号位 0 正数 1负数
        05.符号位就是最高位也是最左边的一位!
        06.负数的反码=符号位不变+其他位取反(1变0 0变1)
        07.负数的补码=反码+1 

    算术的右移 和 算术 左移
      算术的右移:
        01.符号位不变
        02.低位溢出删除
        03.高位补零!

     1 10 >> 1 10的2进制数字 右移一位
     2 
     3 >>:位移的方向
     4 1 :位移的位数
     5 
     6 首先找到10的2进制
     7 
     8 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 ====》10的2进制
     9 >>1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 ====》右移1位的结果
    10 ==================================================================
    11 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 ==》5
    12 
    13 
    14 -1 >> 1
    15 首先找到-1的2进制
    16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ==>-1的2进制 原码
    17 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 ==>-1的2进制 反码
    18 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ==>-1的2进制 补码 
    19 >> 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
    20 ================================================================
    21 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ===》-1的补码
    22 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 ===》-1的反码
    23 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ===》原码 -1
    24 
    25  

      算数左移:
        01.符号位不变
        02.高位溢出删除
        03.低位补零!

    1 << 4
    
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ===》1的补码
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 
    ========================================================================
    0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 ==>结果16

      逻辑右移, 没有逻辑左移! >>>
        01.不管符号位;
        02.地位溢出删除;
        03.高位补0

    -1 >>> 1 -1逻辑右移1位
    
    1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ===》-1的原码
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 ===》-1的反码
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ===》-1的补码
    >>> 1============================================================ 
    0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ===》-1的逻辑右移1位
    
    2147483647 int类型的最大值

    位运算: &  |    ^  ~

      01. & 按位与 :两位都是1,结果是1

    3&4
    
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 
    & 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 
    ===========================================
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

      02.| 按位或 :两位有一位是1,结果是1

    3|4
    
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 
    | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 
    ===========================================
    0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1

      03.^ 按位异或 :两位必须是一个为0,一个为1,结果才是1

    3^4
    
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 
    ^ 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 
    ===========================================
    0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1

      04.~ 按位取反,只能是一个表达式使用
        正数的按位取反= 自身的负数 -1
        负数的按位取反= 自身的绝对值 -1

        ~x   =====>    - (x+1)

    ~3   =====>    -4
    
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 
    ~ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 ==》结果的补码
    ==================================================== 
    1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 ==》结果的反码
    1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 ==》结果的原码
    ======================================================= 
    -4
  • 相关阅读:
    [转]项目管理---敏捷开发思想---带来相当愉快的项目开发过程
    [转] 项目管理---项目经理如何应对客户的需求变更?
    [转]C# 线程知识--使用Task执行异步操作
    [转]细说ASP.NET的各种异步操作
    [转]oracle表分区详解
    解决Asp.net 部署后弹出登陆框
    SVN客户端TortoiseSVN安装配置图文教程
    .net版本区别及发展历程
    CLR via c#读书笔记九:字符、字符串和文本处理
    CLR via c#读书笔记九:接口
  • 原文地址:https://www.cnblogs.com/ak666/p/8125124.html
Copyright © 2011-2022 走看看