温馨提示:看完本篇教程有任何疑问、看不懂的地方,可以在评论区留下你的问题,欢迎大家一起交流学习!
一、课程概述
前面我们已经学完算术、赋值、比较、逻辑运算符,本节课学习位运算符。
位运算符是直接对二进制比特位进行操作的运算符,只能够作用于整数(int)。计算机底层所有数字都是由 0、1 的二进制储存,位运算可以直接操控每一位二进制数值,运行速度很快,常用于算法、权限设置、二进制加密、硬件编程等场景。
二、基础概念讲解
1. 二进制:日常生活使用十进制(逢十进一);二进制只有 0 和 1,逢二进一
示例:十进制数字 5,转为二进制 = 101
2. 比特位:二进制里面每一个 0 或者 1,就叫做1个比特位
3. Python当中整数默认是十进制,`bin()`函数可以把十进制整数转换成二进制字符串
位运算符总表
运算符 | 名称 | 作用说明 |
& | 按位与 | 两位都为1,结果才是1,否则为0 |
| | 按位或 | 任意一位为1,结果就是1 |
^ | 按位异或 | 两位相同为0,两位不同为1 |
~ | 按位取反 | 二进制所有0变1,1变0 |
<< | 左移运算符 | 二进制整体向左移动,低位补0,等价于乘以2的n次方 |
>> | 右移运算符 | 二进制整体向右移动,高位补符号位,等价于整除2的n次方 |
三、代码案例演示
案例1:bin()查看数字的二进制
# 查看十进制数字的二进制a = 6b = 3print(bin(a))print(bin(b))# 输出结果# 0b110# 0b011# 0b是二进制标识,后面为真实二进制数值
案例2:按位与 &
规则:对应比特位全1才为1
6 → 110
3 → 011
相与结果:010 也就是十进制 2
运行输出:2
案例3:按位或 |
规则:只要有一个比特位是1,结果就是1
6(110) | 3(011) = 111 → 7
运行输出:7
案例4:按位异或 ^
规则:比特位相同取0,不同取1
6(110) ^ 3(011) = 101 → 5
运行输出:5
小知识点:一个数字异或自己结果永远等于0;数字异或0等于自身
案例5:按位取反 ~
公式:~x = -(x + 1),Python采用补码存储负数
print(~5)# 结果 -6print(~-3)# 结果 2
案例6:左移 <<
向左移动n位,右边空位补0,数值 = 原数 * (2 ** n)
a = 2print(a << 1) # 二进制10左移一位→100,等于4print(a << 3) # 2*8=16
案例7:右移 >>
向右移动n位,舍弃右侧比特,正数高位补0,等价于整除 2**n
a = 8print(a >> 1) # 8 / 2 = 4print(a >> 2) # 8 / 4 = 2
四、特殊知识点总结
1. 位运算只支持整数,浮点数、字符串无法进行位运算,代码会直接报错
2. 左移适合快速放大数字,右移适合快速做整数除以2的运算,运算速度远超普通乘除
3. 异或的常用小技巧:交换两个变量数值
x = 10y = 20x = x ^ yy = x ^ yx = x ^ yprint(x,y) # 20 10
4. 运算符优先级:按位取反 > 左移右移 > 按位与 > 按位异或 > 按位或
五、课后练习题(3道)
习题1(基础)
写出代码,计算 9 & 4、9 | 4、9 ^ 4 的运行结果,并且使用bin()查看对应二进制。
习题2(填空)
1. 5 << 2 的结果等于?
2. 16 >> 3 的结果等于?
习题3(拓展实操)
利用异或运算符,完成 a=7、b=13 两个变量的值互换,打印输出交换过后的a、b。
本节课程到这里就结束啦!有代码报错、知识点没弄懂、实操遇到困难,欢迎在评论区留言,一起沟通学习!