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上的运行结果是: