• 计算机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,低位舍弃

  • 相关阅读:
    关于ssh的一篇很好的文章
    课后作业--2 阅读计划及问题
    课后作业--1
    课后作业PPT 7
    大道至简 7、8、读后感
    第六章 读后感
    第五篇 读后感
    数组课后作业
    课后作业1:字串加密
    第四篇 读后感
  • 原文地址:https://www.cnblogs.com/pengmn/p/11725750.html
Copyright © 2020-2023  润新知