部分面试题
问题:写一个函数,判断一个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++语言写一个这样的示例类.