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

猜你喜欢

转载自www.cnblogs.com/pengmn/p/11725750.html