位运算基础知识

来源:互联网 发布:富士plc中文编程软件 编辑:程序博客网 时间:2024/06/06 00:56

最近想了解下位运算,在大学里学过,但是已经忘记了,今天就学习了下位运算的知识

1、与运算 &
   运算规则:两位全位1,结果才为1,否则为0
    0&0=0; 0&1=0; 1&0=0; 1&1=1;
   特殊用法:
   (1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。
   (2)取一个数中指定位
     例:设X =10101110,取X的低4位,用X&00001111 = 0000 1110 即可得到

2、或运算 |

   运算规则:只要有一个为1,结果就为1
   0|0=0; 0|1=1; 1|0=1; 1|1=1;
   特殊用法:
   常用来对一个数据的某些位置1

3、异或运算 ^
   运算规则:两个相应位为"异"(值不同),则该位结果为1,否则为0 
    0^0=0; 0^1=1; 1^0=1; 1^1=0;
   特殊用法:
   (1)使特定位翻转 找一个数,对应X要翻转的各位,该数的对应位为1,其余位为0,此数与X对应位异或即可
    例:设X =10101110,使X低4位翻转,用X^00001111 = 1010 0001 即可得到
    (2)与0相异或,保留原值
       X^00000000 = 10101110
   (3)两个变量交换值的方法
     a、借助第三个变量来实现 C=A; A=B; B=C
     b、利用加减法实现两个变量的交换 A=A+B;B=A-B;A=A-B
     c、用位异或运算来实现,也是效率最高            A=A^B;B=A^B;A=A^B

4、反码 ~
   运算规则:对一个二进制数按位取反,即将0变1,1变0

5、左移 <<
   运算规则:将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)
   2<<1 = 4  0000 0010 << 0000 0100 = 4
 若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
  -14 1111 0010 << 2 = 1100 1000

6、右移 >> 
  运算规则:将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。操作数每右移一位,相当于该数除以2。(注意:左补0 or 补1 得看被移数是正还是负)
-14 >> 2 = 1111 0010 >> 2 = 1111 1100 = -4

7、无符号右移 >>>
  运算规则:各个位向右移 指定的位数。右移后左边空出的位用0来填充。移出右边的位被丢弃
   -14 >>> 2  = 1073741820

负数以其正值的补码形式表示

原码
  一个整数按照绝对值大小转换成的二进制数称为原码
  14 0000 0000 0000 0000 0000 0000 0000 1110
反码
  将二进制数按位取反,所得的新二进制数称为原二进制数的反码
 0000 0000 0000 0000 0000 0000 0000 1110    
 1111 1111 1111 1111 1111 1111 1111 0001
补码 
 反码加1称为补码
1111 1111 1111 1111 1111 1111 1111 0001+1=
1111 1111 1111 1111 1111 1111 1111 0010

-14 << 2
1111 1111 1111 1111 1111 1111 1111 0010

1111 1111 1111 1111 1111 1111 1100 1000

分析:只需要该补码的原码对应的正值,然后取相反数
 1、补码减1得到反码
 1100 1000
-        1
 1100 0111
2、补码取反得到原码(即该负数的正值)
 0011 1000
3、计算正值 56
4、取相反数 -56


原创粉丝点击