C语言学习(三)

面试题中的小程序,如何判断一个正整数是2的N次幂,用简单的位运算实现。程序如下所示:

 1 /************************************************************************/
 2 /* 功能:判断一个数是否为2的N次幂
 3 /* 作者:ZL
 4 /* 日期:2018-04-08   14:38                                                                 
 5 /************************************************************************/
 6 
 7 #include <stdio.h>
 8 
 9 typedef int Boolean;
10 
11 #define  TRUE 1
12 #define  FALSE 0
13 
14 Boolean comp(int m)
15 {
16     /**
17     一句话实现是否为2的若干次幂的判断当m中只有一位为1时,才为若干次幂
18 若有两个集以上1,则(m&(m-1))不为0,输出0,表示不为2的若干次幂
19 类比:
20     x为2的若干次幂即表示x中1的位数为1,题目转化为求一个32位数中1的位数,如果为1,
21 则表示该数为2的若干次幂
22     同理也可以用此规则求一个32位数中1的位数,(m&(m-1))每次可用消除一个1,计算的
23 次数即为1的个数
24 */
25     return (m &(m-1)? FALSE:TRUE);
26 }
27 
28 int main(void)
29 {
30     
31    int data=0;
32    scanf("%d",&data);
33     
34    if (comp(data))
35    {
36        printf("%d是2的N次幂\n",data);
37    }
38    else
39    {
40        printf("%d不是2的N次幂\n",data);
41    }
42 
43        
44 }

程序在VC++6.0上的运行结果是:

 

posted @ 2018-04-09 16:39  flyingswallow  阅读(107)  评论(0编辑  收藏  举报