部分面试题

问题:写一个函数,判断一个int型的正整数是否是2的幂,即是否可以表示成2^X的形式(不可以用循环)

参考答案:

//只考虑a大于0的情形

//返回1,表示a为2的幂

//返回0, 表示a不是2的幂

int is2n(int a)

{

return (((~a + 1) & a) == a);

}

例如: 1.对于整数8,判断过程如下:

       二进制    : 1000

      ~a        : 0111

       ~a + 1    : 1000

       (~a + 1)&a: 1000

       显然有:(~ a + 1)&a == a;

     2.对于整数7,判断过程如下:

       二进制    : 0111

      ~a        : 1000

       ~a + 1    : 1001

       (~a + 1)&a: 0001

       显然有:(~ a + 1)&a != a;

 

 

在程序设计和运行中,有时候我们希望一个类有且只有一个实例,请用C++语言写一个这样的示例类.

posted @ 2012-09-19 15:41  10,000 hours coder  阅读(154)  评论(0编辑  收藏  举报