python 判断整数的二进制中是否有两个连续的1(方法二一行代码搞定!)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36528804/article/details/82917518

整数的二进制中是否有两个连续的1?解释如下:
解释:3转成二进制是116转成二进制是110,3和6的二进制数中都至少有两个连续的1。而像5和9的二进制分别是:101、1001,因此,5和9的二进制中没有两个连续的1。
源代码如下,有两种方法(方法二效率更高):

# -*- coding: utf-8 -*- 
# !usr/bin/env python

""" 判断整数的二进制是否有连续两个1 """
# 法一
def f1(n):
	isone1 = False
	isone2 = False
	while n > 0:
		isone1 = n % 2
		if isone1 and isone2:
			return True
		else:
			n = n >> 1
			isone2 = isone1
	return False

# 法二
def f2(n):
	return (n & (n>>1)) > 0


# 测试
L = [1, 2, 3, 4, 5, 6]
result = [3, 6]
if __name__ == '__main__':
	assert result == [x for x in L if f1(x)], "方法1不对!"
	assert result == [x for x in L if f2(x)], "方法2不对!"
	print("ok!")

猜你喜欢

转载自blog.csdn.net/qq_36528804/article/details/82917518