位运算
- 1、按位与
- 2、按位或
- 3、按位取反
- 4、按位异或
- 5、按位同或
- 6、左移
- 7、带符号右移
- 8、无符号右移
- 9、python实现各种位运算操作
- 10、位运算小技巧
- 11、应用
\quad \quad 现代计算机中,几乎都是二进制计算机(三进制计算机仅有少量),所有的数据都以二进制的形式存储在设备中。位运算就是直接对整数在内存中的二进制位进行操作,计算时将十进制转为 二进制,再进行计算。
\quad \quad 需要注意,位运算是针对 二进制 的运算,对每一个位进行布尔运算操作。所以 手动 进行 位运算计算 时,需要将数转换成二进制的表示形式,再进行计算。
1、按位与 \quad \quad 计算时将 十进制 转为 二进制 再进行计算,同位置为1,则结果为1,其余情况皆为0
文章图片
- 结论:n&(n-1) 会去除 n 的位级表示中最低的那一位 1。
- 应用例题:二进制中1的个数
文章图片
3、按位取反 \quad \quad 对每一位进行取反操作,如果是1则结果为0,是0则结果为1。即为反码
文章图片
4、按位异或 \quad \quad 当两个对应位不同时结果才为1,相同时得0.
文章图片
性质:
- 任何数和 0做异或运算,结果仍然是原来的数,即a⊕0=a。
文章图片
- 任何数和其自身做异或运算,结果是 0,即 a⊕a=0。
文章图片
- 异或运算满足交换律和结合律,a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。
文章图片
文章图片
6、左移 \quad \quad 将二进制位上的数向左移动,右边补0.
文章图片
7、带符号右移 \quad \quad 有符号整数最高位代表着数的正负,最高位为1代表负数,最高位为0代表正数。
\quad \quad 带符号右移是右移时,左边补充最高位上的值。
文章图片
8、无符号右移 \quad \quad 二进制上的数向右移动,右移时左边补0。
文章图片
9、python实现各种位运算操作
位运算符 | 说明 | 使用形式 |
---|---|---|
& | 按位与 | a&b |
| | 按位或 | a|b |
~ | 按位取反 | ~a |
^ | 按位异或 | a^b |
<< | 按位左移 | a< |
>> | 按位右移 | a>>b |
- | 转换为负数 | -a |
文章图片
因此,x 和 ?x 只有一个共同点:最右边的 1。这说明
x & (-x)
将保留最右边的 1。并将其他的位设置为 0。文章图片
2、将二进制中最右边的1置为0: X & (X - 1)
- (x - 1) 代表了将 x 最右边的 1 设置为 0,并且将较低位设置为 1。
- 再使用与运算:则 x 最右边的 1 和就会被设置为 0,因为 1 & 0 = 0。
文章图片
11、应用 Leetcode之位运算
推荐阅读
- 操作系统|快@你的好兄弟好姐妹来内卷进程状态
- (一).python基础知识
- CGB2202|CGB2202语言基础第2天
- 《力扣周赛题解》|【解题报告】力扣 第 279 场周赛
- 《LeetCode算法全集》|LeetCode 297. 二叉树的序列化与反序列化
- 备战蓝桥杯|【蓝桥Python每日一练】————砝码称重(状压DP)
- 《LeetCode算法全集》|LeetCode 2167. 移除所有载有违禁货物车厢所需的最少时间
- 树莓派文字转语音|树莓派文字转语音 python_基于树莓派的OTON眼镜(将文本转换为语音)
- 深度学习|【深度学习1】Anaconda3的安装和Jupyter的使用