位运算符详解

在学编程语言的时候,位运算符老师讲的很少,但是在刷ACM的时候还是会经常出现的,今天就做一下小结:

原码,反码和补码的概念:

数在计算机中是以二进制形式表示的,数分为有符号数和无符号数,原码、反码、补码都是有符号定点数的表示方法,
一个有符号定点数的最高位为符号位,0是正,1是负。
正数的反码和补码都是和原码相同,负数的反码是将其原码除符号位之外的各位求反 ,负数的补码=反码+1。
eg:

原码反码补码
30000 00110000 00110000 0011
-31000 00111111 11001111 1101

<<和>>运算符:

>>运算符:将数化为二进制形式,然后向右移产生会空位,产生的空位根据高位来补。如果高位是0,则空位补0,若是1,则补1。
eg:
 3>>2:3原码(0000 0011) ==》 右移两位产生两个空位(   00 0000)==》高位为0则空位补0(0000 0000)此时可根据该码直将二进制数化为十进制数得出结果,即3>>2=0
 
 -3>>2: -3原码(1000 0011) ==》补码(1111 1101)==》 右移两位产生两个空位(   11 1111)==》高位为1则空位补1(1111 1111)
 此时不可根据该码直接求十进制数,而是化为该码对应的原码,再根据原码将二进制数化为十进制数,即化为原码为(1000 0001)则-3>>2= -1


<<运算符:将数化为二进制形式,然后向左移产生会空位,右边空出的位用0填补,高位左移溢出则舍弃该高位。
eg:

 -3<<2:-3原码(1000 0011) ==》-3补码(1111 1101) ==》左移两位产生两个空位( 1111 01  )==》空位补0(1111 0100)
 此时不可根据该码直接求十进制数,而是化为该码对应的原码,再根据原码将二进制数化为十进制数,即化为原码为(1000 1100)则-3>>2= -12

<<<和>>>运算符:

<<<运算符:无符号左移运算符,忽略了符号位扩展,0补最高位
>>>运算符:无符号右移规则和右移运算是一样的,只是填充时不管左边的数字是正是负都用0来填充,无符号右移运算只针对负数计算,因为对于正数来说这种运算没有意义

&,|和 ∧运算符

 &运算符: 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。(与)
 eg:
 3&5     0011
      & 0101
      ————————
       0001
  即3&5=1


 |运算符:两个相应的二进制位中只要有一个为1,该位的结果值为1。(或)
eg:
3|5       0011
     |  0101
     ————————
        0111
  即3|5=7


 ^ 运算符: 若参加运算的两个二进制位值相同则为0,否则为1(异或)
 eg:
 3^5
        0011
      ^   0101
      ————————
        0110
  即:3^5=6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值