加入收藏 | 设为首页 |

邯郸-Python这些位运算的妙用,肯定让你大开眼界,附材料

海外新闻 时间: 浏览:214 次

位运算的功用咱们想必是清楚的,功率必定高。信任喜好源码的同学,在学习阅览源码的进程中会发现不少源码运用了位运算。可是为啥在实践编程进程中运用少呢?想必最大的原因,是较为难明。不过,在面试的进程中,在手写代码进程中,写出一两个位运算的代码,还会让面试官眼前一亮的。

位运算常用的运算符包含&(按位与), | (按位或邯郸-Python这些位运算的妙用,肯定让你大开眼界,附材料),~(按位非),^(按位异或),>(有符号右移位)。


下面用几个比如阐明其运用,期望对你有所启示。

1、判别奇数仍是偶数

一般判别奇数仍是偶数咱们想到的方法便是除以2,看余数是否为0。

Python代码如下:

def isodd(x): 好日子香烟return True if (x % 2 0) else False怎样运用位运算呢?

咱们只需求运用&运算,与1进行&,假如为1,那么该数为奇数;假如为0,那么该数是偶数,Python代码如下:

def isodd(x): return True if (x & 1) else False2、左移一位相当于乘以2,右移一位相当于除以2

在面试的进程中,一般会遇到的一个问题是写二分查找代码。

二分查找的代码如下:

def binary_search(list, item): ''' :param list: 有序列表 :param item: 要查找的元素 :return: item在list中的索引,若不在list中回来None ''' low = 0 high = len(list) - 1 while low item: high = midpoint - 1 return None其中有一步是需求取最小小标和最大下标的中心值,若运用位运算符,midpoint = (low + high) >> 1,面试官必定会对你刮目相看。

3、交流两个数值

数值交流的代码信任咱们都十分了解了,因为似乎是从学编程言语的最开端就一向用:

temp = bb = aa = temp可是怎样运用位运算来完结此功用呢?

a ^= bb ^= aa ^= b的确比较难了解,原理是什么呢?

榜首行,a = a ^ b,很简略了解;

第二行, b = b ^ a = b ^ a ^ b,因为 b ^ b = 0,所以 b = a ^ 0,即 b = a;

第三行, a = a ^ b ,因为a在榜首步从头赋值,所以,a = a ^ b ^ a = b,完结了数值交流。

这儿,总结下异或运算的特性:恣意数和自身异或成果为0;0和恣意数异或成果仍是其自身。

4、寻觅数据列表中的绝无仅有

有一个数据列表(2N+1个整数),只要一个数呈现了1次,其他N个数都呈现了2次。怎样找到这个绝无仅有的数据?

看到这个标题,信任咱们榜首次想到的算法必定是计数,树立列表,循环整个数据并计数,然后遍历这个列表找到呈现次数为1的数据。

这样,空间复杂度为O(N)。

怎样下降空间复杂度呢?

留意看一下刚刚讲过的异或的特性:恣意数和自身异或成果为0;0和恣意数异或成果仍是其自身。

那么,呈现了2次的N个数异或的成果是0,再与呈现次数为1次的数异或的成果即为该数。即:找到这个绝无仅有数据的方法是经过对悉数的数据进行异或操作,空间复杂度下降为O(1)。

5、核算一个数值的二进制数中有多少个1

信任有了之前的根底,咱们很简略完成这个算法。单纯的经过位运算,与1进行与运算,看是否成果为1,然后右移1位,持续判别。Python代码完成如下:

def number1Bit(x): count = 0 while x: count = count + (x&1) x = x >> 1 return count这样存在一个问题,便是假如有接连多个0,那么需求做屡次移位操作。有没有简略的方法越过接连多个0的状况?

那便是经过与(x-1)进行&运算。这儿或许不太好了解,举例阐明一下

x 1110 0000x - 1 1101 1111x&(x-1) 1100 0000经过这种方法,会把最终的那个1检测出来。

Python代码完成如下:

def number1Bit(x): count = 0 while x: count = count + 1 x = x & (x-1) return count总结:

1、与运算一般运用的场景是获取某一位的值为1仍是0(如判别奇数邯郸-Python这些位运算的妙用,肯定让你大开眼界,附材料偶数,计算数值中1的个数);

2、左移右移特性:左移一位相当于乘以2,右移一位相当于除以2;

3、异或特性:恣意数和自身异或成果为0;0和恣意数异或成果仍是其自身。

咱们有什么想说的,欢迎留言哈!更多关于Python的学习教程也会定时为咱们更新!

最终小编为咱们预备了一些python的学习教程,期望能够协助到咱们。

以上邯郸-Python这些位运算的妙用,肯定让你大开眼界,附材料这些教程柠檬现已为咱们打包预备好了,期望对正在学习的你有所协助!

请咱们转发本文+重视并私信小编:“材料”,即可免费获取哦!