python左移右移位运算_python-位运算

本文介绍了Python中的位运算,包括按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)和右移(>>)。通过实例解释了位运算的过程,并详细说明了二进制补码、反码和原码的关系。
摘要由CSDN通过智能技术生成

先简单说一些概念:

原码:从符号位开始表示,1是正数,0是负数

反码:正数的原码反码补码都是一样的。

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反

比如-5转成二进制原码1101,在算出反码1010

补码:正数的原码反码补码都是一样的。

负数的补码是反码+1

1.按位与&:#下面的与运算结果是4

>>> a = 15

>>> b = 36

>>> a & b

4

# 计算过程

首先将a和b转换成二进制补码,每一位进行与运算,上下两个数都为1结果就是1,否则为0

a = 0000 1111 = 15

b = 0010 0100 = 36

res = 0000 0100 = 4

2.按位或|:>>> a = 15

>>> b = 36

>>> a | b

47

# 计算过程

首先将a和b转换成二进制补码,每一位进行或运算,上下两个数只要有一个数为1结果就是1,否则为0

a = 0000 1111 = 15

b = 0010 0100 = 36

res = 0010 1111 = 47

3.按位异或^:>>> a = 15

>>> b = 36

>>> a ^ b

47

# 计算过程

首先将a和b转换成二进制补码,每一位进行异或运算,上下两个数相同为0,不同为1

a = 0000 1111 = 15

b = 0010 0100 = 36

res = 0010 1011 = 43

4.按位取反~:>>> a = 15

>>> ~a

-16

#计算过程

首先将a转换成二进制补码,每一位进行取反

a = 0000 1111 = 15

not = 1111 0000 = 符号位为1(即负数) 补码

-------------------------------------------------------

#已知补码计算反码(上面说到了负数的补码=反码+1,所以补码-1=反码)

1111 0000

- 1

---------------------

1110 1111 反码

#已知反码求原码(负数的反码=原码的符号位不变,其余各个位取反,

#所以我们将数值位取反即可算出原码)

1110 1111

1001 0000 原码

#至此就算出了取反后的原码,我们在用8421法将二进制原码换算成10进制,最后的结果就是-16

按位左移<<:>>> a = 15

#左移两位

>>> a << 2

60

# 计算过程

首先将a和b转换成二进制补码,然后往左边移动两位,右边少的两位用0来补

a = 0000 1111 = 15

000011 1100 = 60

0011 1100 = 60

按位右移动>>:>>> a = 15

#右移两位

>>> a >> 2

3

# 计算过程

首先将a和b转换成二进制补码,然后往右移动两位,左边少的两位用0来补

a = 0000 1111 = 15

0000 0011 = 3

最后更新于 2020-08-29 17:36:48 并被添加「python」标签,已有 54 位童鞋阅读过。

本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处

相关文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值