Python按位运算详解

位运算符属于更细微的操作,它是针对每个字节中的每个位(bit)进行操作的

运算符描述
&按位“与”
|按位“或”
^按位“异或”
~按位“取反”
<<按位左移
>>按位右移

位运算符在网络通信、硬件驱动领域应用得比较广泛。在编写应用层程序时,用“位”来存储取值范围小的整型变量,可以一定程度地节省内存空间。

下面通过一段程序来演示“位运算符”的使用。示例如下,定义两个变量,分别按照表中的运算符对其运算,观察运算结果。

定义两个变量 a 和 b,其中 a 的值为 1,b 的值为 3,按照表中的赋值运算符,对其进行“与”“或”“异或”等操作。代码如下:

a=1  # 01
b=3  # 101           
print(a&b)   #结果为 001
print(a|b)   #结果为 
print(a^b)
print(a<<b)
print(a>>b)

输出结果:

1
3
2
8
0

上面的代码每行后面都配有该代码输出的结果。读者可以对比代码和输出结果体会每个操作符的含义.

代码解析

1) 按位 &

按位与运算 按位与运算符“&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。只要对应的二个二进位都为 1 时,结果位就为 1,否则为 0。法则如下:

1&1=1
1&0=0
0&1=0
0&0=0

上述代码中 1 的二进制是 01;3 的二进制数是 101 按照上述运算法则,结果为 01,因此结果为 1

2) 按位 |

按位或运算 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。

1|1=1
1|0=1
0|1=1
0|0=0

上述代码中 1 的二进制是 01;3 的二进制数是 101 按照上述运算法则计算,结果为 01,因此结果为 3

3) 按位异或

进行异或运算时,当前位的两个二进制表示不同则为 1 相同则为0。

1^1=0
1^0=1
0^1=1
0^0=0

上述代码中 1 的二进制是 01;3 的二进制数是 101 按照上述运算法则计算,结果为 01,因此结果为 2

4) 按位取反

进行按位取反时,就是把操作数的二进制每一位都取反,比如 1 的八位二进制数表示为 0000,0001 取反的结果为 11111110,最高为为符号位(即表示正负,最高位为 1 表示 负数,0 表示正数)。

负数在计算机中是以补码的形式存在的,补码 = 反码 + 1,即 1111 1111,这就是 -1 在计算机中存在形式。

为什么是 8位表示二进制数?
拓展:八位(8bit)是一个字节,计算机中只要一个字节就可以存放ASCII编码,就是所有的数字、大小写字母和一些特殊字符(总共255个)。所以在计算机中对用户来说有意义的单位就是字节,这是我们可以看懂的。八位的二进制数最大值就是255,刚好表示255个ASCII字符。我们汉字使用的是unicode编码的,unicode编码要用两个字节,所以要存放16位二进制数才能代表一个unicode字符。另外还有UTF8编码占四个字节等等。

5) 按位左移

将操作数的二进制所有位向左移动指定的位数。

例如 1 的八位二进制数是 0000 0001 现在向左移动两位( a<< 2),结果为 00000100 ,结果为 4。

6) 按位右移

将操作数的二进制所有位向右移动指定的位数。

例如 10 的二进制数是 00001010 现在向右移动两位(a>>2),结果位 00000010,即被挤走了最后两位,结果为 2。

上述就是关于位运算符的详解介绍,值得注意的是,位运算符是计算机中通用符号,不仅 Python 中存在,其他编程语言中也存在,并且使用方法相同。

© 版权声明
THE END
喜欢就支持一下吧
点赞2赞赏
分享
评论 抢沙发
HarryPotter的头像|艾奇编程网

昵称

取消
昵称表情