位运算是直接对内存中的二进制位进行操作,因此,它的运算效率相比一般的数学运算是比较高的。一般情况下,位运算主要分为六种:与运算、或运算、异或运算、取反运算、左移运算、右移运算。
在开始之前,先介绍一下将十进制转换成二进制的方法。为节约篇幅说明后面的内容,此处我们直接使用 python 内置的 bin() 函数将整数转换为二进制。
注意:若操作系统为32位,则二进制根据位数补全32位即可,以下用低位说明问题,如 10 的二进制计算出为 1010,则补全32位应为 00000000000000000000000000001010。
1def toBin(num):
2 # 十进制转换成二进制
3 res = bin(int(num))
4 # 去掉前两位,因为内置函数转换后前面两个字符是0b
5 return res[2:]
6
7if __name__ == '__main__':
8 print toBin(10)
1、与运算
1def toBin(num):
2 # 十进制转换成二进制
3 res = bin(int(num))
4 # 去掉前两位,因为内置函数转换后前面两个字符是0b
5 return res[2:]
6
7if __name__ == '__main__':
8 print toBin(10)
9 结果10的二进制是1010
10 print toBin(8)
11 结果8的二进制是1000
12 根据二进制“与”的计算规则:两个数的相同位都为1时则对比结果为1,否则为0
13 对比结果:1000 转为10进制也就是8
14 print 10 & 8
15 8
2、或运算
1def toBin(num):
2 # 十进制转换成二进制
3 res = bin(int(num))
4 # 去掉前两位,因为内置函数转换后前面两个字符是0b
5 return res[2:]
6
7if __name__ == '__main__':
8 print toBin(10)
9 结果10的二进制是1010
10 print toBin(8)
11 结果8的二进制是1000
12 根据二进制“或”的计算规则:对应的两个二进位有一个为1时结果位就为1,否则为0
13 对比结果:1010 转为10进制也就是10
14 print 10 | 8
15 10
3、异或运算
1def toBin(num):
2 # 十进制转换成二进制
3 res = bin(int(num))
4 # 去掉前两位,因为内置函数转换后前面两个字符是0b
5 return res[2:]
6
7if __name__ == '__main__':
8 print toBin(10)
9 结果10的二进制是1010
10 print toBin(8)
11 结果8的二进制是1000
12 根据二进制“异或”的计算规则:两个对应的二进位相异时结果为1,否则为0
13 对比结果:0010 转为10进制也就是2
14 print 10 ^ 8
15 2
4、取反运算
1# 正数按位取反
2def toBin(num):
3 # 十进制转换成二进制
4 res = bin(int(num))
5 # 去掉前两位,因为内置函数转换后前面两个字符是0b
6 return res[2:]
7
8if __name__ == '__main__':
9 print toBin(10)
10 结果10的二进制是1010
11 根据二进制“正数取反”的计算规则:首先 10 为正数它的补码应该为 01010,
12 紧接着按位取反为 10101,再转为原码为 11010,再对原码加1为11011,则最后结果为 -11
13 print ~10
14 -11
15 也可以直接使用公式计算:~10 = -(10 + 1)
5、左移运算
1def toBin(num):
2 # 十进制转换成二进制
3 res = bin(int(num))
4 # 去掉前两位,因为内置函数转换后前面两个字符是0b
5 return res[2:]
6
7if __name__ == '__main__':
8 print toBin(10)
9 结果10的二进制是1010
10 根据二进制“左移”的计算规则:将位数将左移动,遵循低位补0、高位丢弃
11 向左移动一位
12 对比结果:01010 转为10进制也就是20
13 print 10 << 1
14 20
6、右移运算
1def toBin(num):
2 # 十进制转换成二进制
3 res = bin(int(num))
4 # 去掉前两位,因为内置函数转换后前面两个字符是0b
5 return res[2:]
6
7if __name__ == '__main__':
8 print toBin(10)
9 结果10的二进制是1010
10 根据二进制“右移”的计算规则:将位数向右移动,遵循低位丢弃、高位补0或补1(正数补0、负数补1)
11 向右移动一位
12 对比结果:0101 转为10进制也就是5
13 print 10 >> 1
14 5
更多精彩前往微信公众号【Python 集中营】,专注后端编程实战,原创文章每天更新!
相关推荐
《大话数据分析:Tableau数据可视化实战》的数据集是一份重要的资源,对于想要学习和提升Tableau数据可视化技能的人来说极具价值。Tableau是一款强大的商业智能工具,它允许用户通过直观的拖放界面来探索和可视化...
大话Java:从零基础到数据库、Web开发以漫画的形式,由浅入深、循序渐进地介绍Java编程的常用技术和方法,内容涵盖了Java基本语法结构、面向对象特征、集合框架体系、异常处理、GUI编程、MySQL数据库、JDBC数据库...
大话存储:存储系统底层架构原理极限剖析(终极版)第3部分 大话存储:存储系统底层架构原理极限剖析(终极版)第3部分大话存储:存储系统底层架构原理极限剖析(终极版)第3部分
2. **多行字符串**:Python中,用三个单引号或双引号括起的字符串可以跨越多行,这在打印长文本或代码块时非常有用。在打印皮卡丘的练习中,多行字符串用于存储整个字符画,然后一次性打印出来。 3. **转义字符**:...
大话Python|基础语法(上)
大话存储:存储系统底层架构原理极限剖析(终极版)_张冬2015.01_P989
- **大言不惭**:形容说大话。 - **明目张胆**:形容公然妄为。 - **明哲保身**:形容逃避责任。 - **忘乎所以**:形容过于兴奋。 - **高谈阔论**:形容不切实际的谈论。 - **始作俑者**:比喻开创恶劣风气。 ...
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向...
共5个压缩包
本文用比喻的方法大话python语言 通俗易懂 很容易上手,把深奥的文字变成形象化 的语言Python语言是什么? 想象你有一个非常聪明的机器人朋友,名字叫Python。Python能听懂你用简单的英语(编程语言)告诉它的指令,...
从逻辑电路基础开始,逐步深入到芯片设计的每一个细节,最终揭示了芯片制造的神秘面纱。制造芯片如同点沙成金,工艺极其复杂,对技术精度的要求也极高。 《大话处理器》不仅是一本技术读物,更是一部科普书籍。作者...
大话存储:存储系统底层架构原理极限剖析(终极版)第4部分 大话存储:存储系统底层架构原理极限剖析(终极版)第4部分
《大话存储:存储系统底层架构原理极限剖析(终极版)》是一本深入探讨存储技术的专业书籍,由一位对技术充满热情的作者精心撰写。这本书以其严谨性和创新性,为读者揭示了存储系统的奥秘,提供了全面而深入的洞察。...
[大话存储:网[大话存储:网络存储系统原理精解与最佳实践].张冬.扫描版络存储系统原理精解与最佳实践].张冬.扫描版
本文为资深网络编辑鲜橙与其他几位朋友录制的一段关于移动开发之QT-Quick开发的音频,在情人节来临之际我们特地奉献给大家,希望大家喜欢,也希望大家支持鲜橙! 《大话IT》节目介绍:《大话IT》是由各IT媒体中一群...
大话存储:存储系统底层架构原理极限剖析(终极版)第5部分 大话存储:存储系统底层架构原理极限剖析(终极版)第5部分
php版本用自己现在用的语言重新写一遍,文中的代码均可以在终端内部执行 网页版本: : 相关资源: 目录 执照 MIT许可证。