您的位置:首页 > 编程语言 > C语言/C++

经典问题6 c/c++ 程序设计 ---与或非问题

2010-09-28 09:26 302 查看
(1)面试题:用一个表达式,判断一个数N是否是2的幂次方(2,4,6,8,...),不可以用循环语句做。

1 #include <stdio.h>

2 #include <stdlib.h>

3 #include <unistd.h>

4

5 int main(int argc, char **argv)

6 {

7 unsigned int n = atoi(argv[1]);

8

9 if (n >= 1) {

10 if (n & (n - 1))

11 printf("%d: no/n", n);

12 else

13 printf("%d: yes/n", n);

14 }

15 exit(EXIT_SUCCESS);

16 }

-----------

$ ./a.out 16

16: yes

-----------

知识点:

给定一个正整数(N <= 2^32),要求快速判断它是否为2的幂次方。(不可用循环)

通常我们知道:

十进制 二进制

2^0 == 1 0000 0001

2^1 == 2 0000 0010

2^2 == 4 0000 0100

2^3 == 8 0000 1000

2^4 == 16 0001 0000

2^5 == 32 0010 0000

从上述规律中我们可以得出,题目最终归结为判断此数的二进制表示(unsigned)中是否只有一位为1。

--(2)!(X&(X-1))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: