`
buluzhai
  • 浏览: 110197 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

判断一个数是否2的幂的技巧

阅读更多
设要判断的数是无符号整数X。
首先判断X是否为0,如果为0则不是2的n次幂,返回。
X和X-1进行按位与操作,如果结果是0,则说明这个数是2的n次幂;如果结果非0,则说明这个数不是2 的n次幂。

证明:
如果是2的n次幂,则此数用二进制表示时只有一位是1,其它都是0。减1后,此位变成0,后面的位变成1,所以按位与后结果是0。
如果不是2的n次幂,则此数用二进制表示时有多位是1。减1后,只有最后一个1变成0,前面的 1还是1,所以按位与后结果不是0。
f = v && !(v & (v - 1));



举个例子:                                              
如果n = 16 = 10000, n-1 = 1111
那么:
10000
& 1111
----------
                          0
再举一个例子:如果n = 256 = 100000000, n-1 = 11111111
那么:
100000000
&11111111
--------------
        0
分享到:
评论

相关推荐

    C# 位运算 判断是否为2的N次幂

    在本问题中,我们要讨论如何利用位运算来判断一个数字是否为2的N次幂。 首先,让我们理解什么是2的N次幂。2的N次幂表示为2^n,其中n是一个整数。例如,2^2 = 4, 2^3 = 8, 2^4 = 16等。这些数字在二进制表示中有一个...

    一条语句判断整数a是否是2的整数幂

    在计算机科学领域,判断一个整数是否为2的整数幂是一个常见的问题,尤其是在算法设计、数据结构处理以及系统优化等方面。本篇文章将基于提供的标题、描述、标签和部分内容,详细解析如何通过一条C++语句来判断一个...

    C语言判断一个数是否是2的幂次方或4的幂次方

    在C语言中,判断一个数是否为2的幂次方或4的幂次方涉及到对数值的二进制表示的理解。2的幂次方在二进制表示中具有独特特征,只有一个1,位于二进制的最低位,其余位都是0。4的幂次方同样如此,但它更进一步,要求这...

    水仙花数,也称为阿姆斯特朗数,是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身 例如,153 是

    3. C语言中的条件判断:在isArmstrong函数中,最后通过一个if语句判断计算出的幂次和是否等于原始数字,以此来决定返回值。如果相等则返回1,表示该数是水仙花数,否则返回0。 4. C语言中的输入输出函数:程序使用...

    如何判断一个数是否为2的幂次方?若是,并判断出来是多少次方?

    在计算机科学中,判断一个数是否为2的幂次方是一项常见的操作,尤其在处理位操作和优化算法时。本文将深入探讨这个问题的解决方法,包括两种不同的实现方式:递归和非递归。 首先,我们可以理解2的幂次方在二进制...

    判断一个整数是否是2的N次幂实现方法

    在给出的代码示例中,`CheckPowerOfTwo`函数接受一个无符号长整型(ulong)参数`num`,用于判断该数是否为2的N次幂。函数的核心在于位与操作(&)和减法操作(-): ```cpp return num > 0 && (num & (num - 1)) ==...

    判断一个数是否为素数.rar

    在压缩包内的文件"判断一个数是否为素数.docx"可能是详细讲解这个算法的文档,包括不同的方法和优化技巧。常见的素数判断算法有以下几种: 1. **暴力枚举法**:最直观的方法是检查从2到n-1的所有数,如果它们都不能...

    初等数论中判断一个整数m是否存在原根程序

    首先,我们来理解一下如何判断一个整数m是否存在原根。在模m意义下,如果m是素数,那么根据费马小定理,对于任意不被m整除的整数a,都有a^(m-1) ≡ 1 (mod m)。但这个条件并不保证a有一个较小的幂次就能得到1,所以...

    Project1_水仙花数_自幂数_

    pow是C++标准库中的一个函数,位于头文件内,用于计算一个数的幂。当你提到"使用不了",可能有以下几种情况: 1. **未包含头文件**:确保在代码中包含了`<cmath>`,这是使用pow函数的前提。 2. **类型不匹配**:pow...

    判断素数_yes_素数的判断_

    这个任务的核心就是实现一个函数或程序,能够接受一个正整数作为输入,并判断这个数是否为素数。 要完成这个任务,我们可以采用以下几种方法: 1. **暴力枚举法**: 最直观的方法是,从2到m-1遍历所有整数,如果m...

    判断是否为2的N次方

    在这个测试程序中,我们定义了一个包含不同数值的数组`test_values`,然后遍历数组中的每个元素,用`IS_POWER_OF_TWO`宏判断其是否为2的幂次方,并输出结果。运行此程序,我们可以验证宏的正确性。 总结一下,判断...

    判断一个三位整数是非为水仙花数.zip

    在给定的源.c文件中,我们可以预期代码将实现以下步骤来判断一个三位整数是否为水仙花数: 1. **读取输入**:首先,程序需要获取用户输入的一个三位整数。这可以通过标准输入(stdin)或者函数参数完成。 2. **...

    人教版高中数学必修一课件:3.3幂函数.pptx

    幂函数是高中数学中的一个重要概念,它在日常生活和科学研究中有着广泛的应用。在人教版高中数学必修一的3.3章节中,幂函数被深入地探讨和讲解。 幂函数的基本形式是f(x) = x^α,其中α是一个常数,x是自变量。在...

    北航数值分析幂法和反幂法 特征值.zip

    首先,幂法是一种简单但有效的算法,主要用于找到一个实对称矩阵或正常矩阵的最大特征值。其基本思想是选取一个非零向量作为初始迭代向量,然后反复乘以矩阵,每次迭代都会使最大特征值对应的特征向量分量相对其他...

    七年级数学下册第11章整式的乘除11.6零指数幂与负整数指数幂2作业设计新版青岛版

    例如,选择题和填空题需要判断选项是否符合零指数幂的规则,或者确定某个表达式的有效范围。计算题则需要实际进行幂运算,可能包括多次转换和化简,以得到最终答案。 总结起来,这个作业设计主要测试了学生对整式...

    数值方法课程设计报告幂法反幂法计算矩阵特征值和特征向量-附Matlab程序.doc

    在数值分析领域,矩阵特征值和特征向量的计算是一个核心课题,因为它在众多科学和工程问题中都有着广泛的应用。本课程设计报告聚焦于幂法(Power Method)和反幂法(Inverse Power Method),这两种方法主要用于求解...

    2014-2015学年七年级数学下册 第一章 第2节 幂的乘方与积的乘方导学案2(无答案)(新版)北师大版

    练习题涵盖了一些常见的错误,如(x3)^3=x^6的正误判断,以及一系列幂的乘方计算,如3^21[(2)^3]、(a4)^2、-(b5)^2等。 学习小结部分,要求学生总结幂的乘方运算性质,并分享自己在学习幂的乘方运算过程中的体会。 ...

    几个算法、技巧等等等等等

    在文档"判断一个数字是否为2的阶次方数.doc"中,可能会讲解到具体的位运算技巧,如使用位移操作符(和>>)和位与操作符(&),以及相应的优化算法。 在实际应用中,掌握这些基础知识和技巧能够显著提高我们的编程...

    幂级数复习总结学习教案.ppt

    幂级数的收敛性决定了级数是否可以在某个区域内和为一个有限值。通常,通过比较级数的一般项与无穷小量来判断其收敛性。如在例子中提到,当某一级数在端点处发散,而在其他点收敛,这表明级数的收敛区间为特定范围。...

Global site tag (gtag.js) - Google Analytics