首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python中使用位技巧的64位popcount

在Python中,popcount是指计算一个数的二进制表示中1的个数。位技巧是一种利用位运算来进行高效计算的方法。在64位popcount中,我们可以使用位技巧来计算一个64位整数中1的个数。

以下是使用位技巧的64位popcount的Python代码示例:

代码语言:txt
复制
def popcount(n):
    n = n - ((n >> 1) & 0x5555555555555555)
    n = (n & 0x3333333333333333) + ((n >> 2) & 0x3333333333333333)
    n = (n + (n >> 4)) & 0x0f0f0f0f0f0f0f0f
    n = n + (n >> 8)
    n = n + (n >> 16)
    n = n + (n >> 32)
    return n & 0x7f

# 示例用法
num = 1234567890
count = popcount(num)
print(count)  # 输出:12

这段代码使用了一系列位运算操作来计算一个64位整数中1的个数。具体的位运算操作如下:

  1. n = n - ((n >> 1) & 0x5555555555555555):将n的每两位相邻的1之间插入一个0,然后减去原来的n,得到每两位相邻的1之间的距离。
  2. n = (n & 0x3333333333333333) + ((n >> 2) & 0x3333333333333333):将n的每四位相邻的1之间插入两个0,然后将结果与0x3333333333333333进行按位与操作,得到每四位相邻的1之间的距离。
  3. n = (n + (n >> 4)) & 0x0f0f0f0f0f0f0f0f:将n的每八位相邻的1之间插入四个0,然后将结果与0x0f0f0f0f0f0f0f0f进行按位与操作,得到每八位相邻的1之间的距离。
  4. n = n + (n >> 8):将n的每16位相邻的1之间插入八个0,然后将结果与0x00ff00ff00ff00ff进行按位与操作,得到每16位相邻的1之间的距离。
  5. n = n + (n >> 16):将n的每32位相邻的1之间插入16个0,然后将结果与0x0000ffff0000ffff进行按位与操作,得到每32位相邻的1之间的距离。
  6. n = n + (n >> 32):将n的每64位相邻的1之间插入32个0,然后将结果与0x00000000ffffffff进行按位与操作,得到每64位相邻的1之间的距离。
  7. return n & 0x7f:将结果与0x7f进行按位与操作,得到最终的1的个数。

这种位技巧的方法可以在很短的时间内计算出一个64位整数中1的个数,适用于需要高效计算popcount的场景。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

CC++__builtin_popcount()使用及原理

__builtin_popcount()用于计算一个 32 无符号整数有多少个位为1 Counting out the bits     可以很容易判断一个数是不是2幂次:清除最低1(见上面...相反,它使用一张类似上面提到基于表方法来进行搜索。这无疑很高效并且非常方便。     其他语言使用者没有这个选项(尽管他们可以重新实现这个算法)。...如果一个数只有很少1,另外一个方法是重复获取最低1,并且清除它。...后者是使用二分法,比较巧妙,跟踪调试一下就知道原理了。时间复杂度为 O (lg N) , N 为位数。 不过最高效还是使用查表方式来计算。...path 1 必须有 m - 1 个,使用 G++ 内建函数 __builtin_popcount (path) 来计算。

7.4K60

Pythonproperty使用技巧

property属性 一种用起来像是使用实例属性一样特殊属性,可以对应于某个方法 既要保护类封装特性,又要让开发者可以使用 对象.属性 方式操作方法,@property 装饰器,可以直接通过方法名来访问方法...装饰器 即:在方法上应用装饰器 @property 类属性 即:在类定义值为 property 对象类属性 property() 装饰器方式 在类实例方法上应用 @property 装饰器 Python...类有旧式类 和 新式类,新式类 属性比 旧式类属性丰富。...默认继承object类 以python2、3执行此程序结果不同,因为只有在python3才有@xxx.setter @xxx.deleter """ @property...旧式类只有 @property , 没有@method.setter 和 @method.deleter,新式类则两种都可以使用

1.3K00

React源码运算技巧

源码里各种运算,有必要么? 作为业务依赖框架,为了提升一点点运行时性能,React从不吝惜将源码写很复杂。 在涉及状态、标记、优先级操作地方大量使用运算。...几个常用运算 在JS运算操作数会先转换为Int32(32有符号整型),执行完运算会Int32对应浮点数。 在React,主要用到3种运算符 —— 按与、按或、按非。...如果你对这个结果有疑惑,可以去了解补码相关知识 让我们从易到难,看看运算在React应用。 标记状态 React源码内部有多个上下文环境,在执行函数时经常需要判断当前处在哪个上下文环境。...当业务需要同时处理多个状态时,可以使用如上位运算技巧。 优先级计算 在React,不同情况下调用this.setState触发更新会拥有不同优先级。优先级之间比较、挑选同样使用运算。...总结 虽然业务不常使用操作,但在特定场景下位操作时很方便、高效方式。 这波操作你爱了么?

79320

Python编程高级技巧

、 在Python编程,我们经常会遇到各种高级技巧,这些技巧可以帮助我们更高效地编写代码。...本文将介绍7种常见Python编程技巧,包括列表推导式、生成器表达式、装饰器、上下文管理器、元编程、单例模式和闭包。 如下: 1....列表推导式(List Comprehensions):这是一种简洁创建列表方法,可以在一行代码完成循环和条件判断。...上下文管理器(Context Managers):这是一种管理资源技巧,如文件、网络连接等。上下文管理器使用`with`语句确保资源在使用后被正确关闭。...例如: 这些技巧都是非常有用,可以帮助我们更好地理解和使用Python语言。如果您还没有使用过这些技巧,建议您尝试一下,相信它们会给您带来很多帮助。 加油各位!

9710

Spring@Async使用技巧

引言 在Java开发,我们常常会遇到需要执行耗时操作场景,例如文件上传、网络请求等。为了提高系统响应速度和并发能力,我们可以使用异步方法来处理这些任务。...使用@Async注解实现异步方法 在Spring框架,我们可以使用@Async注解来标记一个方法为异步方法。...异步方法不能在同一个类调用:如果异步方法和调用它方法在同一个类,则@Async注解可能会失效。为了确保异步方法生效,可以将异步方法抽离成单独类,并通过依赖注入方式使用。...使用方法 综上所述,由于代理对象只能拦截目标方法外部调用,并且同一个类方法调用是同步执行,因此异步方法不能在同一个类调用。...然而,在使用异步方法时,需要注意启用异步支持、避免在同一个类调用异步方法以及合理处理异步方法返回值类型等问题。 希望本文对大家理解和使用异步方法有所帮助,谢谢阅读!

25730

Python实用小技巧

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 话说python是一个大杂会,既可以用来做web,也可以用来做运维,还可以用来做数据科学...(数据分析、数据挖掘、机器学习),正是因为这么庞大功能,所以特意对一些小技巧进行记录: 搜索指定目录下文件(通配符) import glob glob.glob('C:\\Users\\Administrator...x timeit.timeit(test,number=1) timeit.timeit(test_1,number=1) #可以看到xrange效率比range效率要高很多,包括numpy库....keys() 设置pyhon默认编码 import sys if sys.getdefaultencoding()!...("z") Out[14]: -1 test="abadefgh" test.rfind("a") Out[18]: 2 经常与glob模块glob函数配合一起使用 file_names = glob

70550

浅谈程序设计操作什么是操作操作常用技巧操作应用,常见算法题小结

而且,在面试或者笔试,考察基本操作应用越老越普遍,所以掌握操作基本操作和应用很有必要。...我们先从基本操作概念和基础谈起,并介绍其在程序用处比较多应用,最后根据几道常用算法题来总结升华。...对于-13,二进制代码: 1111 0011 右移两,高位补符号,1111 1100,结果是-4 操作常用技巧 操作经常用于一些小操作,由于他只能操作整形数,所以用途有限,但是一些常用技巧是非常值得掌握...小结 我们先从六种基本操作入手,然后介绍了操作常用技巧,判断奇偶,求绝对值,交换符号,交换两个数。最后根据常用算法题中,利用操作实现两个数相加。基本总结了操作简单应用。...操作当然还有更丰富复杂应用,需要我们在学习过程不断总结。

52210

Python 4 个高效技巧

今天我想和大家分享 4 个省时 Python 技巧,可以节省 10~20% Python 执行时间。 反转列表 Python 通常有两种反转列表方法:切片或 reverse() 函数调用。...交换两个值 用一行代码交换两个变量值是一种更具有 Python 风格方法。 与其他编程语言不同,Python 不需要使用临时变量来交换两个数字或值。...variable_1, variable_2 = variable_2, variable_1 您也可以对字典使用相同技巧: md[key_2], md[key_1] = md[key_1], md...[key_2] 该技巧可以避免多次迭代和复杂数据转换,从而减少执行时间。...这减少了使用 Y 时一次查找(解释器不必先查找 X 模块,然后在 X 模块字典查找 Y)。 总而言之,你可以大量使用 Python 内置函数。

43110

运算(运算技巧、二进制1个数、区间或、异或森林)

00000000000000000000000000000011 00000000000000000000000000000100 > -4 */ printf("e = %d", f); return 0; } 二、运算技巧...= 1;就说明a二进制中最低位是1 //a & 1 == 0;就说明a二进制中最低位是0 //a >> 1;依次顺序移动遍历二进制每一 for (i = 0; i < 32; i++)...0 说明是偶数 1.4 获取二进制数某一 x >> i & 1; // 结果必然为0或1, 表示 x 二进制表示第i 1.5修改二进制某一 x | (1 << i) //...将 x 第i或上1, 则x[i]变为1, // 其他上或上0没有影响 1.6 快速判断一个数字是否为2幂次方 x & (x - 1) // 如果 x 为2幂次方, 则 x 二进制表示只有一个...例: 9二进制表示为 1001,有2是1,所以函数返回 2。 输入描述 输入 x  (内存空间为 32 整数) 输出描述 第一行输出 x 二进制表示1个数。

19310

Python 工匠:使用装饰器技巧

事实上,Python 对某个对象是否能通过装饰器( @decorator)形式使用只有一个要求:decorator 必须是一个“可被调用(callable)对象。...使用 wrapt 模块编写更扁平装饰器 在写装饰器过程,你有没有碰到过什么不爽事情?不管你有没有,反正我有。...因为 Python “装饰器”和“装饰器模式”有着一模一样名字,我不止一次听到有人把它们俩当成一回事,认为使用“装饰器”就是在实践“装饰器模式”。但事实上,它们是两个完全不同东西。...修改外层变量时记得使用 nonlocal 装饰器是对函数对象一个高级应用。在编写装饰器过程,你会经常碰到内层函数需要修改外层函数变量情况。...已省略 ...> Hint:如果要了解更多有关 nonlocal 关键字历史,可以查阅 PEP-3104 总结 在这篇文章里,我与你分享了有关装饰器一些技巧与小知识。

49510

Python 工匠:使用装饰器技巧

事实上,Python 对某个对象是否能通过装饰器( @decorator)形式使用只有一个要求:decorator 必须是一个“可被调用(callable)对象。...更容易实现一个同时兼容装饰器与上下文管理器协议对象(参考 unitest.mock.patch) 二 使用wrapt模块编写更扁平装饰器 在写装饰器过程,你有没有碰到过什么不爽事情?...因为 Python “装饰器”和“装饰器模式”有着一模一样名字,我不止一次听到有人把它们俩当成一回事,认为使用“装饰器”就是在实践“装饰器模式”。但事实上,它们是两个完全不同东西。...__doc__)# 输出 '随机睡眠一小会' 三 修改外层变量时记得使用nonlocal 装饰器是对函数对象一个高级应用。在编写装饰器过程,你会经常碰到内层函数需要修改外层函数变量情况。...已省略 ...> Hint:如果要了解更多有关 nonlocal 关键字历史,可以查阅 PEP-3104 04 总结 在这篇文章里,我与你分享了有关装饰器一些技巧与小知识。

61130

python字典dict操作技巧汇总

字典是使用最为广泛数据结构了,从结构来看,其内容就是键值对,键称为key, 值称为value, 类似词典通过前面的索引来快速查找后面的页面,通过key可以快速定位对应值。...字典,是python对这种结构命名,在其他语言中有其他名字,比如perl称之为哈希。...print(i) ... one tow three 在perl,哈希key都是字符串,而在python,字典key非常灵活,只要是不可变对象都可以,比如数字,字符串,元组。...值为列表字典 python不仅key很灵活,其value也很灵活。..., 2, 3, 4, 5], 'tow': [1, 2, 3, 4, 5]} >>> a['one'] [1, 2, 3, 4, 5] 直接写,当然没什么难度,但是在实际工作,经典使用场景是循环给字典赋值

1.3K10

(经验技巧Python与并发并行

python并发是同时发生事情由线程,任务,进程调用(实际上还是按顺序运行一系列指令)。宏观上看,线程,任务和进程是相同,细节上他们代表不同东西。...每一个进程可以被看做是一个完全不同程序,每一个进程都在自己python解释器运行。...标准库将ThreadPoolExecutor实现为上下文管理器,这样就可以使用with语法来管理线程池创建和回收。并且可以使用其map方法将列表每个站点运行传入函数。...如果想进行更细节线程池管理和使用,可使用thread对象里queue,start,join等函数。...而requests.session()不是线程安全,保护数据访问线程安全策略有几种,一种是使用python队列模块queue(一种使用线程安全数据结构);或线程本地存储,如threading.local

1.1K10

Python 数字类型与转换技巧

Python中有三种数字类型: int(整数) float(浮点数) complex(复数) 当您将值分配给变量时,将创建数字类型变量: 示例:获取您自己Python服务器 x = 1 #...int y = 2.8 # float z = 1j # complex 要验证Python任何对象类型,请使用type()函数: 示例 print(type(x)) print(type(y...随机数 Python没有random()函数生成随机数,但Python有一个内置模块叫做random,可以用来生成随机数: 示例 导入random模块,然后显示1到9之间随机数: import random...Python是一种面向对象语言,因此它使用类来定义数据类型,包括其原始类型。...在Python,类型转换是使用构造函数完成: int() - 从整数文字、浮点文字(通过删除所有小数点)或字符串文字(如果字符串表示整数)构造整数 float() - 从整数文字、浮点文字或字符串文字

18610
领券