zoukankan      html  css  js  c++  java
  • 计算机2进制位运算

    按位与(&)
    0101&1001 = 0001 //有一个为0则结果为0
    按位或(|)
    0101|1001 = 1101 //有一个为1则结果为1
    按位取反(~)
    ~0101 = 1010    //0变1,1变0
    按位异或(^)
    0101^1001 = 1100 //对应bit位相同,则结果位取0,否则取1
    • 0异或任何数=任何数
    • 1异或任何数=任何数取反
    • 任何数异或自己=把自己置为0
      按位异或常见用途:
      1.使某些特定的位翻转 (reverse)
      2.实现两个值的交换,而不必使用临时变量

      a=9(1001), b=12(1100)
      a = a^b //0101
      b = b^a //1001
      a = a^b //1100

      3.快速判断两个值是否相等 return (a^b)== 0

    原码:一个数绝对值的2进制码就是该数的原码
    反码:对一个数的原码取反,得到的就是该数的反码
    补码:对一个数的反码+1,得到的就是该数的补码(最小值除外)

    移位运算

    << 左移位

    计算规则:将2进制数据整体向左移动一位,高位自动溢出,低位补0

    n =     00000100 10010001 00111111 01010101
    m=n<<1  0000100 10010001 00111111 010101010
    k=n<<2  000100 10010001 00111111 0101010100
    j=n<<8  10010001 00111111 01010101 00000000
    >> 带符号右移

    计算规则:规则: 当高位(符号位)为1的时候,高位补1,保持负数符号,低位舍弃 当高位(符号位)为0的时候,高位补0,低位舍弃

    n = -50  11111111 11111111 11111111 11001110 -50
    m=n>>1   111111111 11111111 11111111 1100111 -25
    k=n>>2   1111111111 11111111 11111111 110011 -13
    
    n =  50  00000000 00000000 00000000 00110010  50
    m=n>>1   000000000 00000000 00000000 0011001  25
    k=n>>2   0000000000 00000000 00000000 001100  12
    >>> 无符号右移

    计算规则:无论是正数还是负数,高位补0,低位舍弃

  • 相关阅读:
    Elasticsearch 内存配置应用案例
    shell进阶篇之字典和数组结合应用案例
    shell进阶篇之数组应用案例
    nginx的负载均衡
    nginx的反向代理
    ajax的几种使用
    springboot整合Redis
    java的Spring中@Value注解的使用
    Redis的五种数据类型
    冒泡排序
  • 原文地址:https://www.cnblogs.com/pengmn/p/11725750.html
Copyright © 2011-2022 走看看