按位运算符

按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:

按位与 &

  &  举例: 5&3 = 1  解释: 101  11 相同位仅为个位1 ,故结果为 1

按位或 |

  |  举例: 5|3 = 7  解释: 101  11 出现1的位是 1 1 1,故结果为 111

按位异或 ^ /xor ,相同取0,相异取1.

  ^  举例: 5^3 = 6  解释: 101  11 对位相加(不进位)是 1 1 0,故结果为 110

b^0=b,a^a=0

a^b=c—>a^c=b—>b^c=a—>a^b^c=0

按位取反 ~

  ~  举例: ~5 = -6  解释: 将二进制数+1之后乘以-1,即~x = -(x+1),-(101 + 1) = -110

    按位反转仅能用在数字前面。所以写成 3+~5 可以得到结果-3,写成3~5就出错了

      补码:二进制数在内存中以补码的形式存储。

        最高位为符号位,正数的符号位为 0,负数为 1。

        正数的源码与补码、反码一致,为本身二进制表示。

        负数的补码为:把该数绝对值的补码取反得到反码,然后对整个数加 1,即得该数的补码。

        bin(n & 0xffffffff)可用来获得正数/负数的32位二进制补码。

        此时获得的并不是这个负数的补码,只是形式与负数的32位二进制补码相同。

        或bin(n+2**32).count('1')       #统计负数补码中1的个数

  • ~7,对 7 进行取反:7 的补码是 00000111 对补码取反得到 11111000,最高位 1 为符号位,表示负数,所以该补码对应的整数为 -8。

  • ~-7 对 -7 进行取反:-7 的补码是 11111001 对补码取反得到 00000110,最高位 0 为符号位,表示正数,所以补码对应的整数为 6。

按位左移 <<

  << 举例:  5<<2 = 20 解释:101 向左移动2位得到 10100 ,即右面多出2位用0补

按位右移 >>

  >> 举例: 5>>2 = 1  解释:101 向右移动2位得到 1,即去掉右面的2位

if name == ‘main’:
a = 0x77       #将a转换成数字,a等于119,二进制表示为0111 0111
b = a & 3     #将3表示成二进制为 0011,根据按位与规则,二者结果为0011,转换成十进制为3,所以结果为3
print (‘a & b = %d’ % b)
b &= 7        #即b=b&7 将7表示成二进制为0111,根据按位与规则,结果为0011,转换成十进制也是3
print (‘a & b = %d’ % b)

以上程序的输出结果为:
a & b = 3
a & b = 3


原文链接:https://blog.csdn.net/wangfei8348/article/details/51744311

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值