当前位置: 首页 > 后端技术 > Python

Python大讲:巩固Python基础——位运算之谜

时间:2023-03-25 19:22:44 Python

位运算直接对内存中的二进制位进行运算,因此其运算效率高于一般的数学运算。一般来说,位运算主要分为六种:与运算、或运算、异或运算、取反运算、左移运算、右移运算。在开始之前,先介绍一下十进制转二进制的方法。为了节省篇幅和解释后面的内容,这里我们直接使用python内置的bin()函数将整数转换为二进制。注意:如果操作系统是32位的,32位的二进制可以按照位数补全。下面用低阶来说明问题。比如10的二进制计算就是1010,32位补全应该是000000000000000000000000000001010。1deftoBin(num):2#十进制转二进制3res=bin(int(num))4#去掉前两个字符,因为内置函数转换后前两个字符是0b5returnres[2:]67if__name__=='__main__':8printtoBin(10)1,andoperation1deftoBin(num):2#十进制转二进制3res=bin(int(num))4#去掉前两位,因为内置-in函数转换前两个字符为0b5returnres[2:]67if__name__=='__main__':8printtoBin(10)9结果10的二进制为101010printtoBin(8)11的二进制结果8为100012根据二进制“与”计算规则:当两个数的相同位为1时,比较结果为1,否则为013比较结果:1000转十进制为814print10&81582,oroperation1deftoBin(num):2#十进制转二进制3res=bin(int(num))4#去掉前两个字符,因为内置函数转换后前两个字符为0b5returnres[2:]67if__name__=='__main__':8printtoBin(10)9结果10的二进制值为101010printtoBin(8)11结果8的二进制值为100012根据计算二进制“或”规则:当对应的两个二进制位之一为1时,结果位为1,否则为013比较结果:1010转十进制为1014print10|815103,XORoperation1deftoBin(num):2#十进制转二进制3res=bin(int(num))4#去掉前两位,因为内置函数转换后的前两个字符是0b5returnres[2:]67if__name__=='__main__':8printtoBin(10)9结果10的二进制为101010printtoBin(8)11结果8的二进制值为100012根据二进制“异或”的计算规则:当两个对应的二进制数不同时,结果为1,否则为013比较结果:0010转十进制systemis214print10^81524.取反运算1#将正数逐位取反2deftoBin(num):3#十进制转二进制4res=bin(int(num))5#去掉前两位,因为内置函数转换前两个字符为0b6returnres[2:]78if__name__=='__main__':9printtoBin(10)10结果10的二进制为101011根据计算规则二进制“正数取反”:首先10是正数的补码应该是01010,12接着按位取反为10101,再转为原码为11010,再对原码加1为11011,那么最后的结果是-1113print~1014-1115也可以直接用公式计算culate:~10=-(10+1)5,左移操作1deftoBin(num):2#十进制转二进制3res=bin(int(num))4#去掉前两位,因为内置-in函数转换后前两个字符为0b5returnres[2:]67if__name__=='__main__':8printtoBin(10)9结果10的二进制值为101010根据二进制的计算规则“左移”:将位数左移,依次低位补0,高位舍去11,左移一位12比较结果:01010转十进制为2013print10<<114206,右移操作1deftoBin(num):2#十进制转二进制3res=bin(int(num))4#去掉前两个字符,因为内置函数转换后前两个字符为0b5returnres[2:]67if__name__=='__main__':8printtoBin(10)9结果10的二进制为101010根据二进制“右移”的计算规则:移动数字to右边,跟随舍去低位,高位加0或加1(正数加0,负数加1)11向右移动一位12比较结果:0101转十进制为513打印10>>1145更精彩去到微信公众号【Python集中营】,专注后端编程实践,原创文章每天更新!