python - 在 Python 中检查 2 的幂
问题描述
这个 Python 代码如何检查一个数字是否是 2 的幂?
n>0
很简单,但是有什么作用(n & (n - 1)) == 0
呢?
def is_Power_of_two(n):
return n > 0 and (n & (n - 1)) == 0
解决方案
对于整数类型,'&' 计算其操作数的逻辑按位与。所以让我们取n = 4。
(4 & (4 - 1)) = 4&3
在二进制
100 = 4
011 = 3
和
100 & 011= 000
之所以可行,是因为在二进制中,从任何 2 的幂数中减去 1 与所有位反转的数字相同。当你将这两个二进制和(&)在一起时,你总是得到一个 0。
用例子来详细说明 - 任何 2 的幂的数字都用二进制写成 1,后面跟着 0。1,2,4,8,16,... 是二进制 1、10、100、1000,减去 1 只会给你一个比它小的数字 - 0、01、011、0111 等。
推荐阅读
- spring - Spring Batch 元数据问题
- validation - 引用父或子属性以在 XSD 中进行验证
- ms-access - SQL Select 语句列选择基于 Checkbox TickMark 访问
- php - Laravel-Excel 列格式将数字替换为 0
- php - 如果后端用户为 3-4 或可能增加,如何将前端提交的表单自动分配给后端用户
- android - 在不冻结应用程序的情况下更新 UI 线程
- wildfly - WildFly 11 - JGroups 初始化延迟
- php - 为 PHPMailer 准备电子邮件正文
- google-apps-marketplace - 无法将应用发布到 gsuite 市场。“此表格仅适用于特定插件”
- sas - enter column in a dataset to an array