python位运算符的使用方法及应用(清晰明了,一看就会) | 您所在的位置:网站首页 › 二进制运用 › python位运算符的使用方法及应用(清晰明了,一看就会) |
导言
位运算符是用来操作二进制的。 位运算共有 & | ^ ~ 六种操作方法 二进制在python中表示为”0b”。例如 a = 0b100110。bin函数可以把十进制转化为二进制数。 & (与)如果两个二进制相同位数均为1,则返回的数字的二进制在该位置值也为1,否则为0。
如果两个二进制相同位数至少有一个1,则返回的数字的二进制在该位置值也为1,否则为0。
如果两个二进制相同位数上的数字不同,则返回的数字的二进制在该位置值为1,否则为0。
异或的性质: 满足交换律,即 a ^ b = b ^ a;相同两个数异或为0 ,即 a ^ a = 0;0异或一个数为那个数本身,即 0 ^ a = a。 ~ (取反)将数字转化为二进制后,数字前加一个负号,二进制加1,再返回变换后二进制对应的数。
将数字转化为二进制后,将二进制里最后面的几个数剔除(取决于右移的位数),再返回变换后二进制对应的数。 位运符的妙用 判断整数的奇偶性 我们只需要使用&运算,与1进行&,如果为1,那么该数为奇数;如果为0,那么该数是偶数。(注意,1在python中也可以表示True,0为False) 左移一位相当于乘2,右移一位相当于地板除2这样更清晰明了,并且可提高算法速度(毕竟是运用二进制来进行运算的)! 找数据列表中独一的那个数有一个数据列表(2N+1个整数),只有一个数出现了1次,其余N个数都出现了2次。如何找到这个独一无二的数据?如果通过计数,建立列表,循环整个数据并计数,然后遍历这个列表找到出现次数为1的数据。这样,空间复杂度为O(N)。
如何降低空间复杂度呢?
注意看一下刚刚讲过的异或的特性:任意数和自身异或结果为0;0和任意数异或结果还是其本身。 那么,出现了2次的N个数异或的结果是0,再与出现次数为1次的数异或的结果即为该数。即:找到这个独一无二数据的办法是通过对全部的数据进行异或操作,空间复杂度降低为O(1)。例如: list_ = [1,1,2,2,3,3,4,5,5] res = 0 for i in list_ : res = res ^ i print(res)本文为学习笔记,如有错误,欢迎各位大佬指出 |
CopyRight 2018-2019 实验室设备网 版权所有 |